Merge remote-tracking branch 'origin/2.3-gae'
Conflicts:
build.xml
diff --git a/build.properties.sample b/build.properties.sample
index fb1d632..c5dc8ff 100644
--- a/build.properties.sample
+++ b/build.properties.sample
@@ -19,4 +19,5 @@
# These propeties should point to the rt.jar-s of the respective J2SE versions:
boot.classpath.j2se1.5=C:/Program Files (x86)/Java/jdk1.5.0_16/jre/lib/rt.jar
boot.classpath.j2se1.6=C:/Program Files/Java/jdk1.6.0_24/jre/lib/rt.jar
-mvnCommand=C:/Program Files (x86)/maven3/bin/mvn.bat
\ No newline at end of file
+mvnCommand=C:/Program Files (x86)/maven3/bin/mvn.bat
+gpgCommand=C:/Program Files (x86)/GNU/GnuPG/pub/gpg.exe
\ No newline at end of file
diff --git a/build.xml b/build.xml
index 2dff2d2..e36df5e 100644
--- a/build.xml
+++ b/build.xml
@@ -69,18 +69,6 @@
property="boot.classpath.j2se1.6.correct"
/>
- <condition property="example.freemarker.jar.location"
- value="freemarker.jar" else="build/freemarker.jar">
- <and>
- <available file="freemarker.jar" />
- <not>
- <available file="build/freemarker.jar" />
- </not>
- </and>
- </condition>
-
- <available file="lib/struts" property="struts.available" />
-
<!-- Set up version/timestamp filters and the version property: -->
<tstamp>
<format property="timestampNice" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'"
@@ -350,9 +338,7 @@
</copy>
<copy toDir="build/classes/META-INF">
<fileset dir="."
- includes="
- LICENSE.txt,
- NOTICE.txt"
+ includes="LICENSE"
/>
</copy>
</target>
@@ -598,69 +584,6 @@
<u:manual offline="false" locale="zh_CN" />
</target>
- <!-- ====================== -->
- <!-- Examples -->
- <!-- ====================== -->
-
- <macrodef name="buildExampleWebapp" uri="http://freemarker.org/util">
- <attribute name="exampleName" />
- <sequential>
- <mkdir dir="build/examples/@{exampleName}/WEB-INF/classes" />
- <ivy:cachepath conf="example.@{exampleName}" pathid="ivy.dep" />
- <javac
- srcdir="src/examples/@{exampleName}/WEB-INF/classes"
- destdir="build/examples/@{exampleName}/WEB-INF/classes"
- deprecation="off" debug="on" optimize="off" target="1.5" source="1.5"
- encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep"
- bootclasspath="${boot.classpath.j2se1.5}"
- >
- <classpath>
- <pathelement path="${ivy.dep}" />
- <pathelement location="${example.freemarker.jar.location}" />
- <fileset dir="lib/struts" erroronmissingdir="false">
- <include name="*.jar" />
- </fileset>
- </classpath>
- </javac>
- <copy toDir="build/examples/@{exampleName}">
- <fileset dir="src/examples/@{exampleName}" excludes="**/*.java" />
- </copy>
- <copy file="${example.freemarker.jar.location}"
- todir="build/examples/@{exampleName}/WEB-INF/lib" />
- <echo message="*** Example built: build/examples/@{exampleName} ***" />
- </sequential>
- </macrodef>
-
- <target name="example-webapp1" depends="jar" description="Build example webapp 1">
- <u:buildExampleWebapp examplename="webapp1" />
- </target>
-
- <target name="example-webapp2" depends="jar" description="Build example webapp 2">
- <u:buildExampleWebapp examplename="webapp2" />
- </target>
-
- <target name="example-struts-webapp" depends="jar" description="Build example Struts 1 webapp">
- <fail unless="struts.available"><!--
- -->You have to copy the Struts 1.1 jar-s to <!--
- --><freemarker_project>/lib/struts to build this example!<!--
- --></fail>
- <copy todir="build/examples/struts-webapp/WEB-INF/lib">
- <fileset dir="lib/struts" />
- </copy>
- <u:buildExampleWebapp examplename="struts-webapp" />
- </target>
-
- <target name="example-ant" depends="jar" description="Build Ant example">
- <mkdir dir="build/examples/ant" />
- <copy toDir="build/examples/ant">
- <fileset dir="src/examples/ant" />
- </copy>
- <copy file="${example.freemarker.jar.location}"
- todir="build/examples/ant/lib" />
- <echo message="*** Example built: build/examples/ant ***" />
- </target>
<!-- ====================== -->
<!-- Distributuion building -->
@@ -677,7 +600,7 @@
<antcall target="clean" /> <!-- To improve the reliability -->
<antcall target="_dist" />
</target>
-
+
<target name="_dist"
depends="jar, javadoc, manualOffline"
>
@@ -727,17 +650,10 @@
<fileset dir="build/api" />
</copy>
- <!-- Package -->
- <property name="bin.tar" value="build/dist/apache-freemarker-${version}-bin.tar" />
- <property name="bin.gzip" value="${bin.tar}.gz" />
- <delete file="${bin.tar}" />
- <tar tarfile="${bin.tar}" basedir="${dist.dir}/bin" />
- <delete file="${bin.gzip}" />
- <gzip zipfile="${bin.gzip}" src="${bin.tar}" />
- <delete file="${bin.tar}" />
-
- <!-- Sign and hash: -->
- <!-- TODO -->
+ <u:packageAndSignDist
+ srcDir="${dist.dir}/bin"
+ archiveNameWithoutExt="apache-freemarker-${version}-bin"
+ />
<!-- ..................................... -->
<!-- Source distribution -->
@@ -777,19 +693,60 @@
</fileset>
</copy>
- <!-- Package -->
- <property name="src.tar" value="build/dist/apache-freemarker-${version}-src.tar" />
- <property name="src.gzip" value="${src.tar}.gz" />
- <delete file="${src.tar}" />
- <tar tarfile="${src.tar}" basedir="${dist.dir}/src" />
- <delete file="${src.gzip}" />
- <gzip zipfile="${src.gzip}" src="${src.tar}" />
- <delete file="${src.tar}" />
-
- <!-- Sign and hash: -->
- <!-- TODO -->
+ <u:packageAndSignDist
+ srcDir="${dist.dir}/src"
+ archiveNameWithoutExt="apache-freemarker-${version}-src"
+ />
</target>
+ <macrodef name="packageAndSignDist" uri="http://freemarker.org/util">
+ <attribute name="srcDir" />
+ <attribute name="archiveNameWithoutExt" />
+ <sequential>
+ <local name="archive.tar"/>
+ <property name="archive.tar" value="build/dist/@{archiveNameWithoutExt}.tar" />
+ <local name="archive.gzip"/>
+ <property name="archive.gzip" value="${archive.tar}.gz" />
+ <delete file="${archive.tar}" />
+ <tar tarfile="${archive.tar}" basedir="@{srcDir}" />
+ <delete file="${archive.gzip}" />
+ <gzip zipfile="${archive.gzip}" src="${archive.tar}" />
+ <delete file="${archive.tar}" />
+
+ <echo>Signing "${archive.gzip}"...</echo>
+ <!-- gpg may hang if it exists: -->
+ <delete file="${archive.gzip}.asc" />
+ <exec executable="${gpgCommand}" failonerror="true">
+ <arg value="--armor" />
+ <arg value="--output" />
+ <arg value="${archive.gzip}.asc" />
+ <arg value="--detach-sig" />
+ <arg value="${archive.gzip}" />
+ </exec>
+
+ <echo>*** Signature verification: ***</echo>
+ <exec executable="${gpgCommand}" failonerror="true">
+ <arg value="--verify" />
+ <arg value="${archive.gzip}.asc" />
+ <arg value="${archive.gzip}" />
+ </exec>
+ <local name="signatureGood" />
+ <local name="signatureGood.y" />
+ <input
+ validargs="y,n"
+ addproperty="signatureGood"
+ >Is the above signer the intended one for Apache releases?</input>
+ <condition property="signatureGood.y">
+ <equals arg1="y" arg2="${signatureGood}"/>
+ </condition>
+ <fail unless="signatureGood.y" message="Task aborted by user." />
+
+ <echo>Creating checksum files for "${archive.gzip}"...</echo>
+ <checksum file="${archive.gzip}" fileext=".md5" algorithm="MD5" forceOverwrite="yes" />
+ <checksum file="${archive.gzip}" fileext=".sha512" algorithm="SHA-512" forceOverwrite="yes" />
+ </sequential>
+ </macrodef>
+
<target name="maven-pom">
<echo file="build/pom.xml"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<!--
@@ -817,9 +774,9 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.sonatype.oss</groupId>
- <artifactId>oss-parent</artifactId>
- <version>9</version>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>17</version>
</parent>
<groupId>org.freemarker</groupId>
@@ -828,36 +785,57 @@
<packaging>jar</packaging>
- <name>FreeMarker</name>
+ <name>Apache FreeMarker</name>
<description>
Google App Engine compliant variation of FreeMarker.
FreeMarker is a "template engine"; a generic tool to generate text output based on templates.
</description>
<url>http://freemarker.org/</url>
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://apache.org</url>
+ </organization>
+
<licenses>
<license>
<name>Apache License, Version 2.0</name>
- <url>http://freemarker.org/LICENSE.txt</url>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
</license>
</licenses>
+
<scm>
<connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-freemarker.git</connection>
- <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
- <!-- <url>https://github.com/apache/freemarker/tree/${project.scm.tag}</url> -->
- <tag>master</tag>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-freemarker.git</developerConnection>
+ <url>https://git-wip-us.apache.org/repos/asf?p=incubator-freemarker.git</url>
+ <tag>${version}</tag>
</scm>
- <developers>
- <developer>
- <name>Attila Szegedi</name>
- </developer>
- <developer>
- <name>Daniel Dekany</name>
- <email>ddekany@apache.org</email>
- </developer>
- <developer>
- <name>Jonathan Revusky</name>
- </developer>
- </developers>
+
+ <issueManagement>
+ <system>jira</system>
+ <url>https://issues.apache.org/jira/browse/FREEMARKER/</url>
+ </issueManagement>
+
+ <mailingLists>
+ <mailingList>
+ <name>FreeMarker developer list</name>
+ <post>dev@freemarker.incubator.apache.org</post>
+ <subscribe>dev-subscribe@freemarker.incubator.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@freemarker.incubator.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/incubator-freemarker-dev/</archive>
+ </mailingList>
+ <mailingList>
+ <name>FreeMarker commit and Jira notifications list</name>
+ <post>notifications@freemarker.incubator.apache.org</post>
+ <subscribe>notifications-subscribe@freemarker.incubator.apache.org</subscribe>
+ <unsubscribe>notifications-unsubscribe@freemarker.incubator.apache.org</unsubscribe>
+ <archive>http://mail-archives.apache.org/mod_mbox/incubator-freemarker-notifications/</archive>
+ </mailingList>
+ <mailingList>
+ <name>FreeMarker management private</name>
+ <post>private@freemarker.incubator.apache.org</post>
+ </mailingList>
+ </mailingLists>
<dependencies>
<!-- no required dependencies -->
@@ -874,21 +852,21 @@
<target name="maven-dist" depends="maven-pom"
description="Releases the already built distro to a Maven repository">
<jar destfile="build/maven-source-attachment.jar">
- <fileset dir="${dist.dir}/source/src/main/java" />
- <fileset dir="${dist.dir}/source/src/main/resources" />
+ <fileset dir="${dist.dir}/src/src/main/java" />
+ <fileset dir="${dist.dir}/src/src/main/resources" />
</jar>
<jar destfile="build/maven-javadoc-attachment.jar">
- <fileset dir="${dist.dir}/documentation/_html/api" />
+ <fileset dir="${dist.dir}/bin/documentation/_html/api" />
</jar>
- <property name="maven-server-id" value="ossrh" />
- <property name="maven-repository-url" value="https://oss.sonatype.org/service/local/staging/deploy/maven2/" />
+ <!-- These were copy-pasted from the org.apacha:apache parent POM: -->
+ <property name="maven-server-id" value="apache.releases.https" />
+ <property name="maven-repository-url" value="https://repository.apache.org/service/local/staging/deploy/maven2" />
<!--
Don't deploy to public snapshot repositories here!
It isn't backward compatible as version ranges will pick them up.
-->
-
<input
validargs="y,n"
addproperty="mavenUpload.answer"
@@ -906,17 +884,21 @@
<fail unless="mavenUpload.yes" message="Task aborted by user." />
<!-- Sign and deploy the main artifact -->
- <exec executable="${mvnCommand}">
+ <exec executable="${mvnCommand}" failonerror="true">
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" />
+ <!--
+ As we use the gpg plugin instead of a normal Maven "deploy", sadly we can't just
+ inherit the repo URL and repositoryId from the parent POM.
+ -->
<arg value="-Durl=${maven-repository-url}" />
<arg value="-DrepositoryId=${maven-server-id}" />
<arg value="-DpomFile=build/pom.xml" />
- <arg value="-Dfile=${dist.dir}/freemarker.jar" />
+ <arg value="-Dfile=${dist.dir}/bin/freemarker.jar" />
<arg value="-Pgpg" />
</exec>
<!-- Sign and deploy the sources artifact -->
- <exec executable="${mvnCommand}">
+ <exec executable="${mvnCommand}" failonerror="true">
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" />
<arg value="-Durl=${maven-repository-url}" />
<arg value="-DrepositoryId=${maven-server-id}" />
@@ -927,7 +909,7 @@
</exec>
<!-- Sign and deploy the javadoc artifact -->
- <exec executable="${mvnCommand}">
+ <exec executable="${mvnCommand}" failonerror="true">
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.3:sign-and-deploy-file" />
<arg value="-Durl=${maven-repository-url}" />
<arg value="-DrepositoryId=${maven-server-id}" />
@@ -939,146 +921,14 @@
<echo>*****************************************************************</echo>
<echo>Check the above lines for any Maven errors!</echo>
- <echo>Now you have to release the staged repo on</echo>
- <echo>https://oss.sonatype.org/.</echo>
+ <echo>Now you need to close and maybe release the staged repo on</echo>
+ <echo>http://repository.apache.org.</echo>
+ <echo>Note that before releasing, voting is needed!</echo>
<echo>*****************************************************************</echo>
</target>
<!-- ================================================================== -->
- <!-- Eclipse -->
- <!-- ================================================================== -->
-
- <property name="eclipseFeatureFileName" value="org.freemarker.freemarker.feature_${versionForOSGi}.jar" />
- <property name="eclipseSourceFeatureFileName" value="org.freemarker.freemarker.source.feature_${versionForOSGi}.jar" />
- <property name="eclipsePluginFileName" value="org.freemarker.freemarker_${versionForOSGi}.jar" />
- <property name="eclipseSourcePluginFileName" value="org.freemarker.freemarker.source_${versionForOSGi}.jar" />
-
- <target name="eclipse-update-site" depends="jar">
- <delete dir="build/eclipse" />
-
- <!-- Create org.freemarker.freemarker feature: -->
-
- <mkdir dir="build/eclipse/freemarker/plugins" />
- <copy
- file="build/freemarker.jar"
- tofile="build/eclipse/freemarker/plugins/org.freemarker.freemarker_${versionForOSGi}.jar"
- />
-
- <mkdir dir="build/eclipse/freemarker/features/tmp" />
- <echo file="build/eclipse/freemarker/features/tmp/feature.xml"><![CDATA[<?xml version="1.0"?>
-<feature
- id="org.freemarker.freemarker"
- label="FreeMarker"
- version="${versionForOSGi}">
-
- <description url="http://freemarker.org">
- Adds barebone FreeMarker as a plug-in (OSGi bundle) to Eclipse.
- </description>
-
- <license><!--
- -->Apache License, Version 2.0; see http://freemarker.org/LICENSE.txt.<!--
- --></license>
-
- <plugin
- id="org.freemarker.freemarker"
- download-size="0"
- install-size="0"
- version="${versionForOSGi}"
- unpack="false"
- />
-</feature>
- ]]></echo>
- <jar
- basedir="build/eclipse/freemarker/features/tmp"
- destfile="build/eclipse/freemarker/features/${eclipseFeatureFileName}"
- />
- <delete dir="build/eclipse/freemarker/features/tmp" />
-
- <!-- Create org.freemarker.freemarker.source feature: -->
-
- <mkdir dir="build/eclipse/freemarker/plugins" />
- <jar
- basedir="src/main/java" jarfile="build/eclipse/freemarker/plugins/org.freemarker.freemarker.source_${versionForOSGi}.jar"
- >
- <manifest>
- <attribute name="Bundle-SymbolicName" value="${moduleOrg}.${moduleName}.source" />
- <attribute name="Bundle-Version" value="${versionForOSGi}" />
- <attribute name="Bundle-License" value="Apache License, Version 2.0" />
- <attribute name="Bundle-Vendor" value="freemarker.org" />
- <attribute name="Eclipse-SourceBundle" value='org.freemarker.freemarker;version="${versionForOSGi}";roots:="."' />
- </manifest>
- </jar>
-
- <mkdir dir="build/eclipse/freemarker/features/tmp" />
- <echo file="build/eclipse/freemarker/features/tmp/feature.xml"><![CDATA[<?xml version="1.0"?>
-<feature
- id="org.freemarker.freemarker.source"
- label="FreeMarker source"
- version="${versionForOSGi}">
-
- <description url="http://freemarker.org">
- Adds source code attachment to the barebone FreeMarker plug-in.
- </description>
-
- <license><!--
- -->Apache License, Version 2.0; see http://freemarker.org/LICENSE.txt.<!--
- --></license>
-
- <plugin
- id="org.freemarker.freemarker.source"
- download-size="0"
- install-size="0"
- version="${versionForOSGi}"
- unpack="false"
- />
-</feature>
- ]]></echo>
- <jar
- basedir="build/eclipse/freemarker/features/tmp"
- destfile="build/eclipse/freemarker/features/${eclipseSourceFeatureFileName}"
- />
- <delete dir="build/eclipse/freemarker/features/tmp" />
-
- <!-- Create site: -->
-
- <echo file="build/eclipse/freemarker/site.xml"><![CDATA[<?xml version="1.0"?>
-<site>
- <feature url="features/${eclipseFeatureFileName}"
- id="org.freemarker.freemarker"
- version="${versionForOSGi}">
- <category name="core" />
- <category name="core-with-sources" />
- </feature>
- <feature url="features/${eclipseSourceFeatureFileName}"
- id="org.freemarker.freemarker.source"
- version="${versionForOSGi}">
- <category name="core-with-sources" />
- </feature>
- <category-def name="core" label="FreeMarker core">
- <description>
- Features that are used as dependencies of other products, but do nothing visible themselves.
- </description>
- </category-def>
- <category-def name="core-with-sources" label="FreeMarker core with sources">
- <description>
- Features that are used as dependencies of other products, but do nothing visible themselves.
- Includes source code attachments.
- </description>
- </category-def>
-</site>
- ]]></echo>
- <echo message="**************************************************************" />
- <echo message="The new Eclipse update site is created in:" />
- <echo message="${basedir}/build/eclipse/freemarker" />
- <echo message="You can use this directory as a local update site in Eclipse," />
- <echo message="or if you are an admin who makes a release, you should replace" />
- <echo message="http://freemarker.org/eclipse/freemarker with this directory." />
- <echo message="**************************************************************" />
- </target>
-
-
- <!-- ================================================================== -->
<!-- Dependency management (keep it exactly identical for all projects) -->
<!-- ================================================================== -->
diff --git a/osgi.bnd b/osgi.bnd
index f692d66..412055e 100644
--- a/osgi.bnd
+++ b/osgi.bnd
@@ -26,7 +26,7 @@
Bundle-SymbolicName: ${moduleOrg}.${moduleName}
Bundle-Version: ${versionForOSGi}
-Bundle-License: Apache License, Version 2.0; see: http://freemarker.org/LICENSE.txt
+Bundle-License: Apache License, Version 2.0; see: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-Vendor: freemarker.org
Include-Resource: META-INF=build/classes/META-INF
diff --git a/src/examples/README.txt b/src/examples/README.txt
deleted file mode 100644
index 437cd28..0000000
--- a/src/examples/README.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-Examples
-========
-
-Examples for using FreeMarker (FM):
-
-webapp1 Building Web app. framework around FM, step 1: Hello World!
-webapp2 Building Web app. framework around FM, step 2: Guest-book
-struts-webapp Using FM in a Model-2 framework (Struts 1.1) with JSP taglibs
-ant Demonstrates the FreeMarker XML transform Ant-task
-
-To build the example webapps, you need Ant (http://ant.apache.org/) and run
-the following commands from the base FreeMarker directory:
-
- ant example-<example-name>
-
-where <example-name> is the name of the example as struts-webapp or webapp1.
-The built Web applications will be in the build/examples directory.
-
-For more information read the help.html or README.txt in the directory of
-examples.
diff --git a/src/examples/ant/README.txt b/src/examples/ant/README.txt
deleted file mode 100644
index 5ac811c..0000000
--- a/src/examples/ant/README.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-Issue ant from this directory, and it will create an out directory with HTLM
-in it.
-
-You should do this in the already built example, not inside the
-src/examples/ant directory!
diff --git a/src/examples/ant/build.xml b/src/examples/ant/build.xml
deleted file mode 100644
index b60a2cb..0000000
--- a/src/examples/ant/build.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<project name="FreeMarker-FAQ" default="generate" basedir=".">
- <taskdef
- name="freemarker"
- classname="freemarker.ext.ant.FreemarkerXmlTask"
- classpath="lib/freemarker.jar" />
-
- <target name="generate">
- <mkdir dir="html" />
- <freemarker
- basedir="src/xml"
- destdir="out"
- includes="**/*.xml"
- template="src/template/faq2html.ftl" />
- </target>
-
-</project>
diff --git a/src/examples/ant/src/template/faq2html.ftl b/src/examples/ant/src/template/faq2html.ftl
deleted file mode 100644
index fb6a8ca..0000000
--- a/src/examples/ant/src/template/faq2html.ftl
+++ /dev/null
@@ -1,51 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#escape x as x?html>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
- <head>
- <title>${.node.faq.@title}</title>
- <meta name="keywords" content="FreeMarker, Java, servlet, HTML, template, free software, open source, XML" />
- </head>
- <body bgcolor="#ffffff">
- <h2><a name="top">${.node.faq.@title}</a></h2>
- <#noescape>${.node.faq.preface.@@markup}</#noescape>
- <h3>Table of contents</h3>
-
- <#list .node.faq.topicgroup as topicgroup>
- <h4>${topicgroup.@name}</h4>
- <ul>
- <#list topicgroup.topic as topic>
- <li><a href="#${topic.@id}">${topic.@name}</a></li>
- </#list>
- </ul>
- </#list>
-
- <p>If your question was not answered by this FAQ, write to
- <a href="mailto:${.node.faq.@adminMailTo}">${.node.faq.@adminName}</a>
- (the current maintainer).</p>
- <#list .node.faq.topicgroup.topic as topic>
- <hr />
- <h3><a name="${topic.@id}">${topic.@name}</a></h3>
- <#noescape>${topic.@@nested_markup}</#noescape>
- <p><a href="#top">Back to top</a></p>
- </#list>
- </body>
-</html>
-</#escape>
\ No newline at end of file
diff --git a/src/examples/ant/src/xml/faq.xml b/src/examples/ant/src/xml/faq.xml
deleted file mode 100644
index d201a7f..0000000
--- a/src/examples/ant/src/xml/faq.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<faq title="The Old FreeMarker FAQ" adminMailTo="run2000@users.sourceforge.net" adminName="Nicholas Cull">
- <preface/>
- <topicgroup name="Assembling template data models">
- <topic id="basic" name="Can you give me some examples showing how to assemble a template data model?">
-<p>The easiest way is to use <tt>SimpleHash</tt>, <tt>SimpleList</tt>, and
-<tt>SimpleScalar</tt>. For example, suppose you want to be able to use a
-variable called <tt>foo.bar.baz.bing</tt> in your template. You could make a
-structure of nested <tt>SimpleHash</tt> objects like this: </p>
-<pre>SimpleHash foo = new SimpleHash();
-SimpleHash bar = new SimpleHash();
-SimpleHash baz = new SimpleHash();
-SimpleScalar bing = new SimpleScalar("value of bing");
-baz.put("bing", bing);
-bar.put("baz", baz);
-foo.put("bar", bar);
-modelRoot.put("foo", foo);
-</pre>
-<p>What about nested lists? Suppose you wanted to write something like this in a
-template: </p>
-<pre><list list1 as list2>
- <list list2 as list3>
- <list list3 as element>
- ${element}<br>
- </list>
- </list>
-</list>
-</pre>
-<p>You could make nested <tt>SimpleList</tt>s like this: </p>
-<pre>SimpleList list1 = new SimpleList();
-for (int i = 0; i < 3; i++) {
- SimpleList list2 = new SimpleList();
- for (int j = 0; j < 3; j++) {
- SimpleList list3 = new SimpleList();
- for (int k = 0; k < 3; k++) {
- list3.add(new SimpleScalar("test " +
- String.valueOf(i) +
- " " +
- String.valueOf(j) +
- " " +
- String.valueOf(k)));
- }
- list2.add(list3);
- }
- list1.add(list2);
-}
-
-modelRoot.put("list1", list1);
-</pre>
-<p>The template code above would then produce this output: </p>
-<p>test 0 0 0<br />test 0 0 1<br />test 0 0 2<br />test 0 1 0<br />test 0 1 1<br />test 0
-1 2<br />test 0 2 0<br />test 0 2 1<br />test 0 2 2<br />test 1 0 0<br />test 1 0
-1<br />test 1 0 2<br />test 1 1 0<br /></p>
-<p>etc.</p>
- </topic>
- <topic id="xml" name="Can I use XML documents as data models?">
- <p>Yes, you can. In particular, you have to first build a <a href="http://www.jdom.org/" target="_top">JDOM</a> tree
- from your XML document, and afterwards you can use JDOM tree nodes as data models.
- The extensions library has a class that can wrap a JDOM nodes to expose them to FreeMarker as
- a template model. In order to wrap your JDOM document tree in a freemarker TemplateModel, it is
- sufficient to do the following:</p>
- <pre>
-...
-org.jdom.Document document = getMyDocumentSomehow(...);
-TemplateModel model = new freemarker.ext.jdom.NodeListModel(document);
-...
- </pre>
- <p>In the example below, the templates will be able to access the XML document through the
- "document" variable. The adapter supports all kinds of tree traversals and filterings,
- allows use of a node list as a TemplateListModel, and outputs XML fragments of contained nodes
- when used as a string literal. It also features full XPath support.</p>
- <p>This FAQ page itself is created by applying a FreeMarker template to an XML document. Table
- of contents with links, topic grouping, and "Back to top" are all generated by the template.
- See the <tt>examples/jdom</tt> and <tt>examples/ant</tt>
- directories in FreeMarker distribution for example on using the XML support.</p>
- </topic>
- <topic id="reflect" name="What's a good way to wrap an existing object so that a template can call its methods?">
- <p>The extensions library has classes to wrap arbitrary Java objects
- as data models. In general, all you need to do to wrap your object <tt>obj</tt> into
- a TemplateModel is to call a single static factory method:</p>
- <pre>
-...
-TemplateModel model = freemarker.ext.beans.ReflectionUtilities.wrap(obj);
-...
- </pre>
- <p>After this, you can write arbitrary method calls on the wrapped object, i.e. you
- can write <tt>${obj.getFoo()}</tt> in a template to execute method foo and place its
- result in the template output. Extensions library uses the JavaBeans introspector to discover available
- methods, so you can use bean property-style invocations as well: in previous example you could
- have written <tt>${obj.foo}</tt> as well. If any property or method call returns an object,
- it is automatically wrapped for you, so you can chain invocations: <tt>{$obj.bar.baz.bing}</tt>
- would translate to what in Java would be <tt>obj.getBar().getBaz().getBing()</tt>.
- The framework automatically recognizes arrays as well as iterators, maps and collections
- from <tt>java.util</tt> package and provides them with additional capabilities (arrays,
- iterators, and collections act as list models and maps act as both lists of their entries
- and allow lookup when used as a method model). There is even a facility for invoking
- static methods (in case you ever needed <tt>System.currentTimeMillis()</tt> in a template).</p>
- <p>It is worth noting that the framework caches the results of introspection, so that
- the negative performance impact resulting from reflected method lookup is minimized.</p>
- <p>For example on using the reflection wrapper, see the <tt>examples/webapp</tt>
- directory in the FreeMarker distribution.</p>
- </topic>
- </topicgroup>
- <topicgroup name="Integration">
- <topic id="servlet" name="Is there a HTTP servlet for FreeMarker I can use out-of-the-box?">
- <p>Yes, there is. The extensions library has the class <tt>freemarker.ext.servlet.FreemarkerServlet</tt>
- that you can use to provide template processing capabilities to your webapp. There is even a sample
- webapp under the <tt>examples/webapp</tt> directory of the distribution that should get you started.</p>
- <p>In general, you should only place the following inside your <tt>web.xml</tt> file:</p>
-<pre>
- <servlet>
- <servlet-name>freemarker</servlet-name>
- <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
- <init-param>
- <param-name>TemplatePath</param-name>
- <param-value>/templates</param-value>
- </init-param>
- <init-param>
- <param-name>TemplateDelay</param-name>
- <param-value>0</param-value>
- </init-param>
- <init-param>
- <param-name>NoCache</param-name>
- <param-value>true</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>freemarker</servlet-name>
- <url-pattern>/templates/*</url-pattern>
- </servlet-mapping>
-</pre>
- <p>This will map all URLs beginning with /templates/ to templates in your <tt>webapp/templates</tt> directory.
- The servlet readily provides access to ServletContext, HttpSession, HttpServletRequest and HttpServletRequest
- parameters in the template data model. If you need to have additional variables available in your data model,
- just subclass the servlet and override the <tt>preTemplateProcess()</tt> method to shove any additional data
- you need into the model before the template gets processed.</p>
- </topic>
- <topic id="ant" name="Can I use FreeMarker template processing in Ant?">
- <p>Yes, you can. In particular, there is a FreeMarker task for Ant that will get a set of XML
- files, run them through a FreeMarker template, and output the resulting files in a target
- directory. This method is ideal for generating documentation, SQL scripts, or any other
- transformation requried during your build process. It is a viable alternative to Ant's
- <tt>xslt</tt> task. The Ant task is part of the extensions library. See the <tt>examples/ant</tt>
- directory in FreeMarker distribution for a sample <tt>build.xml</tt> file that employs FreeMarker.</p>
- </topic>
- </topicgroup>
- <topicgroup name="Features">
- <topic id="arithmetic" name="Is it possible to do integer arithmetic in templates?">
- <p>Yes. As of 2.0, FreeMarker supports numerics without casting in and
- out of TemplateScalarModel. The new TemplateNumberModel intrace means
- that numbers of any given precision are supported, not just integers.
- </p>
- <p>The basic arithmetic operators are supported,
- and meaningful comparison can be made between numbers. Internally,
- FreeMarker uses BigDecimals to ensure that no precision is lost when
- performing arithmetic operations. See the <a href="docs/manual/index.html" target="_top">manual</a> for further details.</p>
- </topic>
- <topic id="editorMangle" name="I'm using a visual HTML editor that mangles template tags. Will you change the template language syntax to accomodate my editor?">
-<p>I won't change the standard version, because a lot of templates depend on it.
-However, FreeMarker is designed to make it easy for you to change the syntax to
-suit your needs. Changing the tag delimiters, making tags case-insensitive, and
-representing operators differently would be simple changes to make. Take a look
-at <tt>freemarker.template.compiler.FMParser.jj</tt>, for more details.
-Let me know if you need further explanation of anything in the source code.</p>
-<p>My view is that the editors that break template code are themselves broken;
-you'll probably have the same problem if you try to use them with other template
-systems. A good editor should ignore, not mangle, what it doesn't understand. </p>
- </topic>
- <topic id="structureInfo" name="How can my Java classes ask a template for information about its structure (e.g. a list of all the variables)?">
-<p>This isn't possible, because variable names can be dynamically generated from
-data (see the <a
-href="docs/manual/expressions.html">manual</a>).
-However, there's a more important reason why FreeMarker doesn't support this.
-The design of FreeMarker is based on the idea of a separation between business
-objects and presentation objects. This separation takes two forms: </p>
-<ol>
- <li>The templates know what data to expect, but they don't know how it's
- generated. </li>
- <li>The business objects know what data to produce, but they don't know how
- it's going to be displayed. Therefore, they don't know anything about
- templates. </li>
-</ol>
-<p>Since the business objects don't rely on the templates, if you need to use
-them with some other presentation system, you won't have to rewrite your
-application. </p>
- </topic>
- </topicgroup>
- <topicgroup name="Legal issues">
- <topic id="license" name="If we distribute FreeMarker with our product, do we have to release the source code for our product?">
- <p>No. As of 2.0, FreeMarker is released under the BSD license. This
- means that source or binary distributions may be made freely, and
- can be included in other products, whether commercial or open source.</p>
- <p>The only restrictions apply to the copyright of FreeMarker itself,
- and the use of FreeMarker or its contributors as endorsements of
- your own product. See the <a href="LICENSE.txt">LICENSE</a> for
- further details.</p>
- <p>If you use FreeMarker, I hope you'll send me a link to some information about
- your product, but that's optional as well.</p>
- </topic>
- </topicgroup>
-</faq>
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/AddAction.java b/src/examples/struts-webapp/WEB-INF/classes/example/AddAction.java
deleted file mode 100644
index f2df9a4..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/AddAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.List;
-import javax.servlet.http.*;
-import org.apache.struts.action.*;
-
-
-public class AddAction extends GuestbookAction {
-
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest req,
- HttpServletResponse resp) throws Exception {
-
- GuestbookEntryForm f = (GuestbookEntryForm) form;
- List guestbook = getGuestbook();
- synchronized (guestbook) {
- guestbook.add(0, new GuestbookEntry(
- f.getName(), f.getEmail(), f.getMessage()));
- }
-
- return mapping.findForward("success");
- }
-
-}
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/ApplicationResources.properties b/src/examples/struts-webapp/WEB-INF/classes/example/ApplicationResources.properties
deleted file mode 100644
index 7d6f5c8..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/ApplicationResources.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-errors.header=<p><font color=red>Please correct the following problems:</font><ul>
-errors.prefix=<li><font color=red>
-errors.suffix=</font>
-errors.footer=</ul>
-errors.required={0} is required.
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/FormAction.java b/src/examples/struts-webapp/WEB-INF/classes/example/FormAction.java
deleted file mode 100644
index 183fde5..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/FormAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import javax.servlet.http.*;
-import org.apache.struts.action.*;
-
-
-public class FormAction extends GuestbookAction {
-
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest req,
- HttpServletResponse resp) throws Exception {
-
- return mapping.findForward("success");
- }
-
-}
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookAction.java b/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookAction.java
deleted file mode 100644
index 6d8a7d4..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.*;
-import org.apache.struts.action.*;
-
-/**
- * Defines utility methods for this application.
- */
-public class GuestbookAction extends Action {
-
- ArrayList getGuestbook() {
- return (ArrayList) servlet.getServletContext()
- .getAttribute(GuestbookActionServlet.GUESTBOOK_KEY);
- }
-}
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookActionServlet.java b/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookActionServlet.java
deleted file mode 100644
index b7e0496..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookActionServlet.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.*;
-import javax.servlet.*;
-
-import org.apache.struts.action.ActionServlet;
-
-public class GuestbookActionServlet extends ActionServlet {
-
- static final String GUESTBOOK_KEY = "guestbook";
-
- public void init(ServletConfig scfg) throws ServletException {
- super.init(scfg);
-
- ServletContext sctx = scfg.getServletContext();
-
- // Add application specific global objects
- sctx.setAttribute(GUESTBOOK_KEY, new ArrayList());
- }
-}
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntry.java b/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntry.java
deleted file mode 100644
index 76fa240..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntry.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-public class GuestbookEntry {
- private String name;
- private String email;
- private String message;
-
- public GuestbookEntry(String name, String email, String message) {
- this.name = name;
- this.email = email;
- this.message = message;
- }
-
- public String getEmail() {
- return email;
- }
-
- public String getMessage() {
- return message;
- }
-
- public String getName() {
- return name;
- }
-
-}
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntryForm.java b/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntryForm.java
deleted file mode 100644
index 12b4dd6..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/GuestbookEntryForm.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts.action.*;
-
-public class GuestbookEntryForm extends ActionForm {
- private String name;
- private String email;
- private String message;
-
- public GuestbookEntryForm() {
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = normalizeString(email);
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = normalizeString(message);
- }
-
- public void setName(String name) {
- this.name = normalizeString(name);
- }
-
- public String getName() {
- return name;
- }
-
- public ActionErrors validate(ActionMapping arg0, HttpServletRequest arg1) {
- ActionErrors errs = new ActionErrors();
- if (name.length() == 0) {
- errs.add("name", new ActionError("errors.required", "name"));
- }
- if (message.length() == 0) {
- errs.add("message", new ActionError("errors.required", "message"));
- }
- return errs.size() == 0 ? null : errs;
- }
-
- private static String normalizeString(String s) {
- if (s == null) return "";
- return s.trim();
- }
-}
\ No newline at end of file
diff --git a/src/examples/struts-webapp/WEB-INF/classes/example/IndexAction.java b/src/examples/struts-webapp/WEB-INF/classes/example/IndexAction.java
deleted file mode 100644
index 695c283..0000000
--- a/src/examples/struts-webapp/WEB-INF/classes/example/IndexAction.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.*;
-import javax.servlet.http.*;
-import org.apache.struts.action.*;
-
-public class IndexAction extends GuestbookAction {
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest req,
- HttpServletResponse resp) throws Exception {
-
- List snapShot;
-
- synchronized (getGuestbook()) {
- snapShot = (List) getGuestbook().clone();
- }
- req.setAttribute("guestbook", snapShot);
-
- return mapping.findForward("success");
- }
-}
diff --git a/src/examples/struts-webapp/WEB-INF/struts-config.xml b/src/examples/struts-webapp/WEB-INF/struts-config.xml
deleted file mode 100644
index 2a50399..0000000
--- a/src/examples/struts-webapp/WEB-INF/struts-config.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
-
-<struts-config>
- <form-beans>
- <form-bean name="guestbookEntry" type="example.GuestbookEntryForm"/>
- </form-beans>
-
- <action-mappings>
- <action
- path="/index"
- type="example.IndexAction">
- <forward name="success" path="/index.ftl"/>
- </action>
-
- <action
- path="/form"
- type="example.FormAction"
- name="guestbookEntry"
- scope="request"
- validate="false">
- <forward name="success" path="/form.ftl"/>
- </action>
-
- <action
- path="/add"
- type="example.AddAction"
- name="guestbookEntry"
- validate="true"
- scope="request"
- input="/form.do">
- <forward name="success" path="/add.ftl"/>
- </action>
-
- </action-mappings>
-
- <message-resources parameter="example.ApplicationResources"/>
-
-</struts-config>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/WEB-INF/struts-html.tld b/src/examples/struts-webapp/WEB-INF/struts-html.tld
deleted file mode 100644
index 5586e4b..0000000
--- a/src/examples/struts-webapp/WEB-INF/struts-html.tld
+++ /dev/null
@@ -1,2934 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-
-
-
-
-
-
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
-<taglib>
-<tlibversion>1.0</tlibversion>
-<jspversion>1.1</jspversion>
-<shortname>html</shortname>
-<uri>http://jakarta.apache.org/struts/tags-html-1.0</uri>
-<tag>
-<name>base</name>
-<tagclass>org.apache.struts.taglib.html.BaseTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>target</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>button</name>
-<tagclass>org.apache.struts.taglib.html.ButtonTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>cancel</name>
-<tagclass>org.apache.struts.taglib.html.CancelTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>checkbox</name>
-<tagclass>org.apache.struts.taglib.html.CheckboxTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>errors</name>
-<tagclass>org.apache.struts.taglib.html.ErrorsTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>bundle</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>file</name>
-<tagclass>org.apache.struts.taglib.html.FileTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>accept</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>maxlength</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>size</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>form</name>
-<tagclass>org.apache.struts.taglib.html.FormTag</tagclass>
-<bodycontent>JSP</bodycontent>
-<attribute>
-<name>action</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>enctype</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>focus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>method</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onreset</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onsubmit</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>target</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>type</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>frame</name>
-<tagclass>org.apache.struts.taglib.html.FrameTag</tagclass>
-<attribute>
-<name>anchor</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>forward</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>frameborder</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>frameName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>href</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>longdesc</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>marginheight</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>marginwidth</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>noresize</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramProperty</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramScope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scrolling</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>transaction</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>hidden</name>
-<tagclass>org.apache.struts.taglib.html.HiddenTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>write</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>html</name>
-<tagclass>org.apache.struts.taglib.html.HtmlTag</tagclass>
-<bodycontent>JSP</bodycontent>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>xhtml</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>image</name>
-<tagclass>org.apache.struts.taglib.html.ImageTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>align</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>border</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>bundle</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>pageKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>src</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>srcKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>img</name>
-<tagclass>org.apache.struts.taglib.html.ImgTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>align</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>border</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>bundle</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>height</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>hspace</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>imageName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ismap</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>lowsrc</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>pageKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramProperty</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramScope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>src</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>srcKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>usemap</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>vspace</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>width</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>javascript</name>
-<tagclass>org.apache.struts.taglib.html.JavascriptValidatorTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>dynamicJavascript</name>
-<required>false</required>
-<rtexprvalue>false</rtexprvalue>
-</attribute>
-<attribute>
-<name>formName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>method</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>src</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>staticJavascript</name>
-<required>false</required>
-<rtexprvalue>false</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>link</name>
-<tagclass>org.apache.struts.taglib.html.LinkTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>anchor</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>forward</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>href</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>linkName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramProperty</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramScope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>target</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>transaction</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>messages</name>
-<tagclass>org.apache.struts.taglib.html.MessagesTag</tagclass>
-<teiclass>org.apache.struts.taglib.html.MessagesTei</teiclass>
-<bodycontent>JSP</bodycontent>
-<attribute>
-<name>id</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>bundle</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>header</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>footer</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>message</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>multibox</name>
-<tagclass>org.apache.struts.taglib.html.MultiboxTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>option</name>
-<tagclass>org.apache.struts.taglib.html.OptionTag</tagclass>
-<attribute>
-<name>bundle</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>key</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>locale</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>options</name>
-<tagclass>org.apache.struts.taglib.html.OptionsTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>collection</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>filter</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>labelName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>labelProperty</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>optionsCollection</name>
-<tagclass>org.apache.struts.taglib.html.OptionsCollectionTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>filter</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>label</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>password</name>
-<tagclass>org.apache.struts.taglib.html.PasswordTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>maxlength</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>readonly</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>redisplay</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>size</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>radio</name>
-<tagclass>org.apache.struts.taglib.html.RadioTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>idName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>reset</name>
-<tagclass>org.apache.struts.taglib.html.ResetTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>rewrite</name>
-<tagclass>org.apache.struts.taglib.html.RewriteTag</tagclass>
-<bodycontent>empty</bodycontent>
-<attribute>
-<name>anchor</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>forward</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>href</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>page</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramName</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramProperty</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>paramScope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>scope</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>transaction</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>select</name>
-<tagclass>org.apache.struts.taglib.html.SelectTag</tagclass>
-<bodycontent>JSP</bodycontent>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>multiple</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>size</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>submit</name>
-<tagclass>org.apache.struts.taglib.html.SubmitTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>text</name>
-<tagclass>org.apache.struts.taglib.html.TextTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>maxlength</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>readonly</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>size</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-<tag>
-<name>textarea</name>
-<tagclass>org.apache.struts.taglib.html.TextareaTag</tagclass>
-<attribute>
-<name>accesskey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>alt</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>altKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>cols</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>disabled</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>indexed</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>name</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onblur</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onchange</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>ondblclick</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onfocus</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeydown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeypress</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onkeyup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousedown</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmousemove</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseout</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseover</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>onmouseup</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>property</name>
-<required>true</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>readonly</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>rows</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>style</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleClass</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>styleId</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>tabindex</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>title</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>titleKey</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-<attribute>
-<name>value</name>
-<required>false</required>
-<rtexprvalue>true</rtexprvalue>
-</attribute>
-</tag>
-</taglib>
-
diff --git a/src/examples/struts-webapp/WEB-INF/web.xml b/src/examples/struts-webapp/WEB-INF/web.xml
deleted file mode 100644
index fa8e60b..0000000
--- a/src/examples/struts-webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
-Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-
-<web-app>
- <display-name>FreeMarker Struts Example</display-name>
-
- <!-- Struts controller servlet -->
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>example.GuestbookActionServlet</servlet-class>
- <init-param>
- <param-name>config</param-name>
- <param-value>/WEB-INF/struts-config.xml</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>2</param-value>
- </init-param>
- <init-param>
- <param-name>detail</param-name>
- <param-value>2</param-value>
- </init-param>
- <load-on-startup>2</load-on-startup>
- </servlet>
-
- <!-- FreeMarker view servlet (to replace JSP) -->
- <servlet>
- <servlet-name>freemarker</servlet-name>
- <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
-
- <!-- FreemarkerServlet settings: -->
- <init-param>
- <param-name>TemplatePath</param-name>
- <param-value>/</param-value>
- </init-param>
- <init-param>
- <param-name>NoCache</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>ContentType</param-name>
- <param-value>text/html</param-value>
- </init-param>
-
- <!-- FreeMarker settings: -->
- <init-param>
- <param-name>incompatible_improvements</param-name>
- <param-value>2.3.21</param-value>
- </init-param>
- <init-param>
- <param-name>template_exception_handler</param-name>
- <!-- Some may prefer "html_debug" for development. -->
- <param-value>rethrow</param-value>
- </init-param>
- <init-param>
- <param-name>template_update_delay</param-name>
- <!-- 0 is for development only! Use higher value otherwise. -->
- <param-value>0</param-value>
- </init-param>
- <init-param>
- <param-name>default_encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>locale</param-name>
- <param-value>en_US</param-value>
- </init-param>
- <init-param>
- <param-name>number_format</param-name>
- <param-value>0.####</param-value>
- </init-param>
-
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>action</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>freemarker</servlet-name>
- <url-pattern>*.ftl</url-pattern>
- </servlet-mapping>
-
- <welcome-file-list>
- <welcome-file>help.html</welcome-file>
- </welcome-file-list>
-
- <!--
- Prevent the visiting of MVC Views from outside the servlet container.
- RequestDispatcher.forward/include should and will still work.
- Removing this may open security holes!
- -->
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>FreeMarker MVC Views</web-resource-name>
- <url-pattern>*.ftl</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <!-- Nobody is allowed to visit these -->
- </auth-constraint>
- </security-constraint>
-
-</web-app>
diff --git a/src/examples/struts-webapp/add.ftl b/src/examples/struts-webapp/add.ftl
deleted file mode 100644
index e1c09b9..0000000
--- a/src/examples/struts-webapp/add.ftl
+++ /dev/null
@@ -1,32 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#escape x as x?html>
-
-<@com.page title="Entry added">
- <p>You have added the following entry to the guestbook:
- <p><b>Name:</b> ${guestbookEntry.name}
- <#if guestbookEntry.email?length != 0>
- <p><b>Email:</b> ${guestbookEntry.email}
- </#if>
- <p><b>Message:</b> ${guestbookEntry.message}
- <p><a href="index.do">Back to the index page...</a>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/form.ftl b/src/examples/struts-webapp/form.ftl
deleted file mode 100644
index ee92da1..0000000
--- a/src/examples/struts-webapp/form.ftl
+++ /dev/null
@@ -1,39 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#global html=JspTaglibs["/WEB-INF/struts-html.tld"]>
-<#escape x as x?html>
-
-<@com.page title="Add Entry">
- <@html.errors/>
-
- <@html.form action="/add">
- <p>Your name:<br>
- <@html.text property="name" size="60"/>
- <p>Your e-mail (optional):<br>
- <@html.text property="email" size="60"/>
- <p>Message:<br>
- <@html.textarea property="message" rows="3" cols="60"/>
- <p><@html.submit value="Submit"/>
- </@html.form>
-
- <p><a href="index.do">Back to the index page</a>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/help.html b/src/examples/struts-webapp/help.html
deleted file mode 100644
index 740bee8..0000000
--- a/src/examples/struts-webapp/help.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
- <title>FreeMarker Struts Example - Help</title>
- <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
-</head>
-<body>
-
-<h1>FreeMarker Struts Example</h1>
-
-<p>This is an example of using FreeMarker templates instead of JSP with Struts 1.1.
-This meant to demonstrate how to use FreeMarker templates in a "Model 2" framework,
-and how to use custom JSP tags as if they were user-defined FreeMarker directives.
-(You can find more information about these in the FreeMarker Manual.)
-
-<p>To try this example you should visit
-<a href="index.do"><code>http://<i>yourServer</i>/<i>thisWebApp</i>/index.do</code></a>
-
-<p><b>Note:</b> To simplify the example, the guest-book entries are not stored
-persistently. If you reload the servlet all guest-book entry will lose.
-
-<hr>
-<p><a href="index.do">Back to the index page</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/index.ftl b/src/examples/struts-webapp/index.ftl
deleted file mode 100644
index 531017c..0000000
--- a/src/examples/struts-webapp/index.ftl
+++ /dev/null
@@ -1,41 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#escape x as x?html>
-
-<@com.page title="Index">
- <a href="form.do">Add new message</a> | <a href="help.html">Help</a>
- <#if guestbook?size = 0>
- <p>No messages.
- <#else>
- <p>The messages are:
- <table border=0 cellspacing=2 cellpadding=2 width="100%">
- <tr align=center valign=top>
- <th bgcolor="#C0C0C0">Name
- <th bgcolor="#C0C0C0">Message
- <#list guestbook as e>
- <tr align=left valign=top>
- <td bgcolor="#E0E0E0">${e.name} <#if e.email?length != 0> (<a href="mailto:${e.email}">${e.email}</a>)</#if>
- <td bgcolor="#E0E0E0">${e.message}
- </#list>
- </table>
- </#if>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/lib/common.ftl b/src/examples/struts-webapp/lib/common.ftl
deleted file mode 100644
index 57d11be..0000000
--- a/src/examples/struts-webapp/lib/common.ftl
+++ /dev/null
@@ -1,39 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#macro page title>
- <html>
- <head>
- <title>FreeMarker Struts Example - ${title?html}</title>
- <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
- </head>
- <body>
- <h1>${title?html}</h1>
- <hr>
- <#nested>
- <hr>
- <table border="0" cellspacing=0 cellpadding=0 width="100%">
- <tr valign="middle">
- <td align="left">
- <i>FreeMarker Struts Example</i>
- <td align="right">
- <a href="http://freemarker.org"><img src="poweredby_ffffff.png" border=0></a>
- </table>
- </body>
- </html>
-</#macro>
\ No newline at end of file
diff --git a/src/examples/struts-webapp/poweredby_ffffff.png b/src/examples/struts-webapp/poweredby_ffffff.png
deleted file mode 100644
index 22b3a80..0000000
--- a/src/examples/struts-webapp/poweredby_ffffff.png
+++ /dev/null
Binary files differ
diff --git a/src/examples/webapp1/WEB-INF/classes/example/HelloServlet.java b/src/examples/webapp1/WEB-INF/classes/example/HelloServlet.java
deleted file mode 100644
index b430338..0000000
--- a/src/examples/webapp1/WEB-INF/classes/example/HelloServlet.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.*;
-import java.io.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-import freemarker.template.*;
-
-/**
- * This Servlet does not do anything useful, just prints "Hello World!". The
- * intent is to help you to get started if you want to build your own Controller
- * servlet that uses FreeMarker for the View. For more advanced example, see the
- * 2nd Web application example.
- */
-public class HelloServlet extends HttpServlet {
-
- // Volatile so that it's properly published according to JSR 133 (JMM).
- // Although, the servlet container most certainly makes this unnecessarry.
- private volatile Configuration cfg;
-
- public void init() {
- // Initialize the FreeMarker configuration;
- // - Create a configuration instance with the defaults of FreeMarker 2.3.21
- Configuration cfg = new Configuration(Configuration.VERSION_2_3_21);
- // - Templates are stoted in the WEB-INF/templates directory of the Web app.
- cfg.setServletContextForTemplateLoading(
- getServletContext(), "WEB-INF/templates");
- // - Give the standard error page on template errors (HTTP 500, usually):
- cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
- // You should set various other settings in a real app.
- // See the "webapp2" example for them.
-
- // Finished modifying cfg, so let's publish it to other threads:
- this.cfg = cfg;
- }
-
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- // Build the data-model
- Map root = new HashMap();
- root.put("message", "Hello World!");
-
- // Get the templat object
- Template t = cfg.getTemplate("test.ftl");
-
- // Prepare the HTTP response:
- // - Use the charset of template for the output
- // - Use text/html MIME-type
- resp.setContentType("text/html; charset=" + t.getEncoding());
- Writer out = resp.getWriter();
-
- // Merge the data-model and the template
- try {
- t.process(root, out);
- } catch (TemplateException e) {
- throw new ServletException(
- "Error while processing FreeMarker template", e);
- }
- }
-}
\ No newline at end of file
diff --git a/src/examples/webapp1/WEB-INF/templates/test.ftl b/src/examples/webapp1/WEB-INF/templates/test.ftl
deleted file mode 100644
index 4a63c14..0000000
--- a/src/examples/webapp1/WEB-INF/templates/test.ftl
+++ /dev/null
@@ -1,26 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
- <title>FreeMarker Example Web Application 1</title>
-</head>
-<body>
- ${message}
-</body>
-</html>
\ No newline at end of file
diff --git a/src/examples/webapp1/WEB-INF/web.xml b/src/examples/webapp1/WEB-INF/web.xml
deleted file mode 100644
index aaecc63..0000000
--- a/src/examples/webapp1/WEB-INF/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
-
-<web-app>
- <display-name>FreeMarker Example Web Application 1</display-name>
- <servlet>
- <servlet-name>hello</servlet-name>
- <servlet-class>example.HelloServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>hello</servlet-name>
- <url-pattern>/hello</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>help.html</welcome-file>
- </welcome-file-list>
-</web-app>
\ No newline at end of file
diff --git a/src/examples/webapp1/help.html b/src/examples/webapp1/help.html
deleted file mode 100644
index 2b777d2..0000000
--- a/src/examples/webapp1/help.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
- <title>FreeMarker Example Web Application 1 - Help</title>
- <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
-</head>
-<body>
-
-<h1>FreeMarker Example Web Application 1</h1>
-
-<p>To try this example you should visit
-<a href="hello"><code>http://<i>yourServer</i>/<i>thisWebApp</i>/hello</code></a>
-
-<h2>What's this example about?</h2>
-
-<p>This Servlet does not do anything useful, just prints "Hello World!". The
-intent is to help you to get started if you want to build your own Controller
-servlet that uses FreeMarker for the View. For more advanced example, see the
-2nd Web application example.
-
-</body>
-</html>
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/classes/example/ControllerServlet.java b/src/examples/webapp2/WEB-INF/classes/example/ControllerServlet.java
deleted file mode 100644
index 528270b..0000000
--- a/src/examples/webapp2/WEB-INF/classes/example/ControllerServlet.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.*;
-import javax.servlet.*;
-import javax.servlet.http.*;
-import freemarker.template.*;
-import freemarker.ext.beans.BeansWrapper;
-
-
-/**
- * <p>This is very very primitive MVC Controller servlet base class, based
- * on example 1. The application specific controller servlet should extend
- * this class.
- */
-public class ControllerServlet extends HttpServlet {
-
- // Volatile so that it's properly published according to JSR 133 (JMM).
- // Although, the servlet container most certainly makes this unnecessarry.
- private volatile Configuration cfg;
-
- public void init() {
- // Initialize the FreeMarker configuration;
- // - Create a configuration instance, with the not-100%-backward-compatible
- // fixes up until FreeMarker 2.3.21 applied (as far as it starts
- // with 2.3, these are only minor changes that doesn't affect most apps):
- Configuration cfg = new Configuration(Configuration.VERSION_2_3_21);
- // - Templates are stoted in the WEB-INF/templates directory of the Web app.
- cfg.setServletContextForTemplateLoading(
- getServletContext(), "WEB-INF/templates");
- // - At most how often should FreeMarker check if a template was updated:
- cfg.setTemplateUpdateDelay(isInDevelopmentMode() ? 0 : 60);
- // - When developing, set an error handler that prints errors so they are
- // readable with a Web browser, otherwise we just let the HTTP 500
- // handler deal with it.
- cfg.setTemplateExceptionHandler(
- isInDevelopmentMode()
- ? TemplateExceptionHandler.HTML_DEBUG_HANDLER
- : TemplateExceptionHandler.RETHROW_HANDLER);
- // - Set the default charset of the template files
- cfg.setDefaultEncoding("ISO-8859-1");
- // - Set the charset of the output. This is actually just a hint, that
- // templates may require for URL encoding and for generating META
- // element that uses http-equiv="Content-type".
- cfg.setOutputEncoding("UTF-8");
- // - Set the default locale
- cfg.setLocale(Locale.US);
-
- // Finished modifying cfg, so let's publish it to other threads:
- this.cfg = cfg;
- }
-
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doGet(req, resp);
- }
-
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- // Choose action method
- String action = req.getServletPath();
- if (action == null) action = "index";
- if (action.startsWith("/")) action = action.substring(1);
- if (action.lastIndexOf(".") != -1) {
- action = action.substring(0, action.lastIndexOf("."));
- }
- Method actionMethod;
- try {
- actionMethod =
- getClass().getMethod(action + "Action",
- new Class[]{HttpServletRequest.class, Page.class});
- } catch (NoSuchMethodException e) {
- throw new ServletException("Unknown action: " + action);
- }
-
- // Set the request charset to the same as the output charset,
- // because HTML forms normally send parameters encoded with that.
- req.setCharacterEncoding(cfg.getOutputEncoding());
-
- // Call the action method
- Page page = new Page();
- try {
- actionMethod.invoke(this, new Object[]{req, page});
- } catch (IllegalAccessException e) {
- throw new ServletException(e);
- } catch (InvocationTargetException e) {
- throw new ServletException(e.getTargetException());
- }
-
- if (page.getTemplate() != null) { // show a page with a template
- // Get the template object
- Template t = cfg.getTemplate(page.getTemplate());
-
- // Prepare the HTTP response:
- // - Set the MIME-type and the charset of the output.
- // Note that the charset should be in sync with the output_encoding setting.
- resp.setContentType("text/html; charset=" + cfg.getOutputEncoding());
- // - Prevent browser or proxy caching the page.
- // Note that you should use it only for development and for interactive
- // pages, as it significantly slows down the Web site.
- resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, "
- + "post-check=0, pre-check=0");
- resp.setHeader("Pragma", "no-cache");
- resp.setHeader("Expires", "Thu, 01 Dec 1994 00:00:00 GMT");
- Writer out = resp.getWriter();
-
- // Merge the data-model and the template
- try {
- t.process(page.getRoot(), out);
- } catch (TemplateException e) {
- throw new ServletException(
- "Error while processing FreeMarker template", e);
- }
- } else if (page.getForward() != null) { // forward request
- RequestDispatcher rd = req.getRequestDispatcher(page.getForward());
- rd.forward(req, resp);
- } else {
- throw new ServletException("The action didn't specified a command.");
- }
- }
-
- private boolean isInDevelopmentMode() {
- // FIXME: Should detect this with a system property for example.
- return true;
- }
-
-}
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/classes/example/GuestbookEntry.java b/src/examples/webapp2/WEB-INF/classes/example/GuestbookEntry.java
deleted file mode 100644
index 7e9f6f7..0000000
--- a/src/examples/webapp2/WEB-INF/classes/example/GuestbookEntry.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-public class GuestbookEntry {
- private String name;
- private String email;
- private String message;
-
- public GuestbookEntry(String name, String email, String message) {
- this.name = name;
- this.email = email;
- this.message = message;
- }
-
- public String getEmail() {
- return email;
- }
-
- public String getMessage() {
- return message;
- }
-
- public String getName() {
- return name;
- }
-
-}
diff --git a/src/examples/webapp2/WEB-INF/classes/example/GuestbookServlet.java b/src/examples/webapp2/WEB-INF/classes/example/GuestbookServlet.java
deleted file mode 100644
index fb0ddce..0000000
--- a/src/examples/webapp2/WEB-INF/classes/example/GuestbookServlet.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.io.IOException;
-import java.util.*;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.*;
-
-public class GuestbookServlet extends ControllerServlet {
- /**
- * Stores the list of guestbook entries.
- *
- * <p>Note that for the sake of simplicity, this example
- * does not try to store the guestbook persistenty.
- */
- private ArrayList guestbook = new ArrayList();
-
- public void indexAction(HttpServletRequest req, Page p) {
- List snapShot;
- synchronized (guestbook) {
- snapShot = (List) guestbook.clone();
- }
- p.put("guestbook", snapShot);
- p.setTemplate("index.ftl");
- }
-
- public void formAction (HttpServletRequest req, Page p)
- throws IOException, ServletException {
-
- p.put("name", noNull(req.getParameter("name")));
- p.put("email", noNull(req.getParameter("email")));
- p.put("message", noNull(req.getParameter("message")));
- List errors = (List) req.getAttribute("errors");
- p.put("errors", errors == null ? new ArrayList() : errors);
-
- p.setTemplate("form.ftl");
- }
-
- public void addAction (HttpServletRequest req, Page p)
- throws IOException, ServletException {
- List errors = new ArrayList();
- String name = req.getParameter("name");
- String email = req.getParameter("email");
- String message = req.getParameter("message");
- if (isBlank(name)) {
- errors.add("You must give your name.");
- }
- if (isBlank(message)) {
- errors.add("You must give a message.");
- }
-
- // Was the sent data was correct?
- if (errors.isEmpty()) {
- if (email == null) email = "";
- // Create and insert the new guestbook entry.
- GuestbookEntry e = new GuestbookEntry(
- name.trim(), email.trim(), message);
- synchronized (guestbook) {
- guestbook.add(0, e);
- }
- // Show "Entry added" page.
- p.put("entry", e);
- p.setTemplate("add.ftl");
- } else {
- // Go back to the page of the form
- req.setAttribute("errors", errors);
- p.setForward("form.a");
- }
- }
-
- public static String noNull(String s) {
- return s == null ? "" : s;
- }
-
- public static boolean isBlank(String s) {
- return s == null || s.trim().length() == 0;
- }
-}
diff --git a/src/examples/webapp2/WEB-INF/classes/example/Page.java b/src/examples/webapp2/WEB-INF/classes/example/Page.java
deleted file mode 100644
index fb3ac62..0000000
--- a/src/examples/webapp2/WEB-INF/classes/example/Page.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package example;
-
-import java.util.*;
-
-public class Page {
- private String template;
- private String forward;
- private Map root = new HashMap();
-
- public String getTemplate() {
- return template;
- }
-
- public void setTemplate(String template) {
- forward = null;
- this.template = template;
- }
-
- public void put(String name, Object value) {
- root.put(name, value);
- }
-
- public void put(String name, int value) {
- root.put(name, Integer.valueOf(value));
- }
-
- public void put(String name, double value) {
- root.put(name, Double.valueOf(value));
- }
-
- public void put(String name, boolean value) {
- root.put(name, Boolean.valueOf(value));
- }
-
- public Map getRoot() {
- return root;
- }
-
- public String getForward() {
- return forward;
- }
-
- public void setForward(String forward) {
- template = null;
- this.forward = forward;
- }
-
-}
diff --git a/src/examples/webapp2/WEB-INF/templates/add.ftl b/src/examples/webapp2/WEB-INF/templates/add.ftl
deleted file mode 100644
index 58777b6..0000000
--- a/src/examples/webapp2/WEB-INF/templates/add.ftl
+++ /dev/null
@@ -1,32 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#escape x as x?html>
-
-<@com.page title="Entry added">
- <p>You have added the following entry to the guestbook:
- <p><b>Name:</b> ${entry.name}
- <#if entry.email?length != 0>
- <p><b>Email:</b> ${entry.email}
- </#if>
- <p><b>Message:</b> ${entry.message}
- <p><a href="index.a">Back to the index page...</a>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/templates/form.ftl b/src/examples/webapp2/WEB-INF/templates/form.ftl
deleted file mode 100644
index 69b9b66..0000000
--- a/src/examples/webapp2/WEB-INF/templates/form.ftl
+++ /dev/null
@@ -1,44 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#escape x as x?html>
-
-<@com.page title="Add Entry">
- <#if errors?size != 0>
- <p><font color=red>Please correct the following problems:</font>
- <ul>
- <#list errors as e>
- <li><font color=red>${e}</font>
- </#list>
- </ul>
- </#if>
-
- <form method="POST" action="add.a">
- <p>Your name:<br>
- <input type="text" name="name" value="${name}" size=60>
- <p>Your e-mail (optional):<br>
- <input type="text" name="email" value="${email}" size=60>
- <p>Message:<br>
- <textarea name="message" wrap="soft" rows=3 cols=60>${message}</textarea>
- <p><input type="submit" value="Submit">
- </form>
- <p><a href="index.a">Back to the index page</a>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/templates/index.ftl b/src/examples/webapp2/WEB-INF/templates/index.ftl
deleted file mode 100644
index 92ae90d..0000000
--- a/src/examples/webapp2/WEB-INF/templates/index.ftl
+++ /dev/null
@@ -1,42 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#import "/lib/common.ftl" as com>
-<#escape x as x?html>
-
-<@com.page title="Index">
- <a href="form.a">Add new message</a> | <a href="help.html">How this works?</a>
-
- <#if guestbook?size = 0>
- <p>No messages.
- <#else>
- <p>The messages are:
- <table border=0 cellspacing=2 cellpadding=2 width="100%">
- <tr align=center valign=top>
- <th bgcolor="#C0C0C0">Name
- <th bgcolor="#C0C0C0">Message
- <#list guestbook as e>
- <tr align=left valign=top>
- <td bgcolor="#E0E0E0">${e.name} <#if e.email?length != 0> (<a href="mailto:${e.email}">${e.email}</a>)</#if>
- <td bgcolor="#E0E0E0">${e.message}
- </#list>
- </table>
- </#if>
-</@com.page>
-
-</#escape>
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/templates/lib/common.ftl b/src/examples/webapp2/WEB-INF/templates/lib/common.ftl
deleted file mode 100644
index c6c43ae..0000000
--- a/src/examples/webapp2/WEB-INF/templates/lib/common.ftl
+++ /dev/null
@@ -1,39 +0,0 @@
-<#--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<#macro page title>
- <html>
- <head>
- <title>FreeMarker Example Web Application 2 - ${title?html}</title>
- <meta http-equiv="Content-type" content="text/html; charset=${.output_encoding}">
- </head>
- <body>
- <h1>${title?html}</h1>
- <hr>
- <#nested>
- <hr>
- <table border="0" cellspacing=0 cellpadding=0 width="100%">
- <tr valign="middle">
- <td align="left">
- <i>FreeMarker Example 2</i>
- <td align="right">
- <a href="http://freemarker.org"><img src="poweredby_ffffff.png" border=0></a>
- </table>
- </body>
- </html>
-</#macro>
\ No newline at end of file
diff --git a/src/examples/webapp2/WEB-INF/web.xml b/src/examples/webapp2/WEB-INF/web.xml
deleted file mode 100644
index 91e8f3e..0000000
--- a/src/examples/webapp2/WEB-INF/web.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
-
-<web-app>
- <display-name>FreeMarker Example Web Application 2</display-name>
- <servlet>
- <servlet-name>guestbook</servlet-name>
- <servlet-class>example.GuestbookServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>guestbook</servlet-name>
- <url-pattern>*.a</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>help.html</welcome-file>
- </welcome-file-list>
-</web-app>
\ No newline at end of file
diff --git a/src/examples/webapp2/help.html b/src/examples/webapp2/help.html
deleted file mode 100644
index c8d8fed..0000000
--- a/src/examples/webapp2/help.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<html>
-<head>
- <title>FreeMarker Example Web Application 2 - Help</title>
- <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
-</head>
-<body>
-
-<h1>FreeMarker Example Web Application 2</h1>
-
-<p>To try this example you should visit
-<a href="index.a"><code>http://<i>yourServer</i>/<i>thisWebApp</i>/index.a</code></a>
-
-<p><b>Note:</b> To simplify the example, the guest-book entries are not stored
-persistently. If you reload the servlet all guest-book entry will lose.
-
-
-<h2>What's this example about?</h2>
-
-<p>This is a very primitive controller servlet class (was written based on FreeMarker Example Web Application 1)
-and a simple guest-book appliction that uses the conroller servlet class. This whole stuff is a very
-primitive thing. It is only to get you started if you plan to develop some custom "framework" for your
-Web applications, rather than using an already written framework.
-Note that a Web application framework can use very different approach than this
-example.
-
-
-<h2>How this example works?</h2>
-
-<p>This example uses a primitive controller servlet, <code>example.ControllerServlet</code>.
-To add application specific behavior, you should extend this servlet
-with an application specific subclass, that adds the so-called action
-methods. Here we implement a primitive guest book application by
-extending <code>ControllerServlet</code> with <code>GuestbookServlet</code>, that adds 3
-action methods:
-<ul>
- <li><code>indexAction</code>: Shows the whole guest-book.
- <li><code>formAction</code>: Show the from where you enter a guest-book entry.
- <li><code>addAction</code>: Adds a new guest-book entry.
-</ul>
-
-<p>The <code>ControllerServlet</code> calls the action methods when it receives client requests.
-It deduces the name of the action methods to call
-from the request URL. The servlet will be invoked only if the request URL is
-ending with ".a", as you can see in the <code>WEB-INF/web.xml</code>, otherwise a static file
-(for example this html file, or an image file) will be returned as is.
-To deduce the method name, the servlet removes the <code>.a</code> and the Web-application directory
-from the request URL, and then appends <code>"Action"</code>. Thus, if you type
-<code>http://<i>yourServler</i>/<i>thisWebApp</i>/foo.a</code>, then it will try to
-call the <code>fooAction</code> method.
-
-<p>Each action method gets two parameters: the <code>HttpServletRequest</code>, and
-the <code>Page</code> object. The <code>Page</code> object plays the role of
-<code>HttpServletResponse</code>, but instead of calling low lever methods,
-you add objects to the data model with <code>put(<i>name</i>, <i>value</i>)</code>, and
-choose the template (the view) with <code>setTemplate(<i>templateName</i>)</code>; the
-tedious dirty work is done by <code>ControllerServlet</code>.
-
-<p>The templates are stored in the <code>WEB-INF/templates</code> directory.
-
-<p>For more details read the source code.
-
-<hr>
-<p><a href="index.a">Back to the index page</a>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/src/examples/webapp2/poweredby_ffffff.png b/src/examples/webapp2/poweredby_ffffff.png
deleted file mode 100644
index 22b3a80..0000000
--- a/src/examples/webapp2/poweredby_ffffff.png
+++ /dev/null
Binary files differ