001// Licensed under the Apache License, Version 2.0 (the "License");
002// you may not use this file except in compliance with the License.
003// You may obtain a copy of the License at
004//
005// http://www.apache.org/licenses/LICENSE-2.0
006//
007// Unless required by applicable law or agreed to in writing, software
008// distributed under the License is distributed on an "AS IS" BASIS,
009// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
010// See the License for the specific language governing permissions and
011// limitations under the License.
012
013package org.apache.tapestry5.annotations;
014
015import org.apache.tapestry5.http.services.Request;
016import org.apache.tapestry5.internal.transform.OnEventWorker;
017import org.apache.tapestry5.ioc.annotations.UseWith;
018
019import java.lang.annotation.Documented;
020import java.lang.annotation.Retention;
021import java.lang.annotation.Target;
022
023import static java.lang.annotation.ElementType.PARAMETER;
024import static java.lang.annotation.RetentionPolicy.RUNTIME;
025import static org.apache.tapestry5.ioc.annotations.AnnotationUseContext.*;
026
027/**
028 * Annotation that may be placed on parameters of event handler methods.
029 * Annotated parameters will be {@linkplain Request#getParameter(String) extracted from the request},
030 * then {@linkplain org.apache.tapestry5.ValueEncoder converted} to the type of the parameter. Such parameters are separate
031 * from ordinary context parameters (extracted from the Request path). Typically, this is used when
032 * client-side JavaScript adds a query parameter to a request to communicate some information from the client
033 * side to the server side.
034 *
035 * Individual fields may also be directly mapped to query parameters using the {@link ActivationRequestParameter} annotation.
036 * 
037 * @since 5.2.0
038 * @see OnEventWorker
039 */
040@Target(
041{ PARAMETER })
042@Retention(RUNTIME)
043@Documented
044@UseWith(
045{ COMPONENT, MIXIN, PAGE })
046public @interface RequestParameter
047{
048    /** The name of the query parameter to extract from the request. */
049    String value();
050
051    /**
052     * If false (the default), then an exception is thrown when the query parameter is read, if it is blank (null or an
053     * empty string). If true, then blank values are allowed and will be passed through the appropriate {@link org.apache.tapestry5.ValueEncoder}
054     * implementation.
055     */
056    boolean allowBlank() default false;
057}