#*
 * $Id: Action.java 502296 2007-02-01 17:33:39Z niallp $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *#
#if ($parameters.onclick)     onclick="$!struts.htmlEncode($parameters.onclick)"         #end
#if ($parameters.ondblclick)  ondblclick="$!struts.htmlEncode($parameters.ondblclick)"   #end
#if ($parameters.onmousedown) onmousedown="$!struts.htmlEncode($parameters.onmousedown)" #end
#if ($parameters.onmouseup)   onmouseup="$!struts.htmlEncode($parameters.onmouseup)"     #end
#if ($parameters.onmouseover) onmouseover="$!struts.htmlEncode($parameters.onmouseover)" #end
#if ($parameters.onmousemove) onmousemove="$!struts.htmlEncode($parameters.onmousemove)" #end
#if ($parameters.onmouseout)  onmouseout="$!struts.htmlEncode($parameters.onmouseout)"   #end
#if ($parameters.onfocus)     onfocus="$!struts.htmlEncode($parameters.onfocus)"         #end
#if ($parameters.onblur)      onblur="$!struts.htmlEncode($parameters.onblur)"           #end
#if ($parameters.onkeypress)  onkeypress="$!struts.htmlEncode($parameters.onkeypress)"   #end
#if ($parameters.onkeydown)   onkeydown="$!struts.htmlEncode($parameters.onkeydown)"     #end
#if ($parameters.onkeyup)     onkeyup="$!struts.htmlEncode($parameters.onkeyup)"         #end
#if ($parameters.onselect)    onselect="$!struts.htmlEncode($parameters.onselect)"       #end
#if ($parameters.onchange)    onchange="$!struts.htmlEncode($parameters.onchange)"       #end
