Information on the scripting variables that are created/modified by
a tag (at run-time). This information is provided by TagExtraInfo
classes and it is used by the translation phase of JSP.
Scripting variables generated by a custom action may have scope values
of page, request, session, and application.
The class name (VariableInfo.getClassName) in the returned objects
are used to determine the types of the scripting variables.
Because of this, a custom action cannot create a scripting variable
of a primitive type. The workaround is to use "boxed"
types.
The class name may be a Fully Qualified Class Name, or a short
class name.
If a Fully Qualified Class Name is provided, it should refer to a
class that should be in the CLASSPATH for the Web Application (see
Servlet 2.3 specification - essentially it is WEB-INF/lib and
WEB-INF/classes). Failure to be so will lead to a translation-time
error.
If a short class name is given in the VariableInfo objects, then
the class name must be that of a public class in the context of the
import directives of the page where the custom action appears (will
check if there is a JLS verbiage to refer to). The class must also
be in the CLASSPATH for the Web Application (see Servlet 2.3
specification - essentially it is WEB-INF/lib and
WEB-INF/classes). Failure to be so will lead to a translation-time
error.
Usage Comments
Frequently a fully qualified class name will refer to a class that
is known to the tag library and thus, delivered in the same JAR
file as the tag handlers. In most other remaining cases it will
refer to a class that is in the platform on which the JSP processor
is built (like J2EE). Using fully qualified class names in this
manner makes the usage relatively resistant to configuration
errors.
A short name is usually generated by the tag library based on some
attributes passed through from the custom action user (the author),
and it is thus less robust: for instance a missing import directive
in the referring JSP page will lead to an invalid short name class
and a translation error.
Synchronization Protocol
The result of the invocation on getVariableInfo is an array of
VariableInfo objects. Each such object describes a scripting
variable by providing its name, its type, whether the variable is
new or not, and what its scope is. Scope is best described through
a picture:
The JSP 1.2 specification defines the interpretation of 3 values:
NESTED, if the scripting variable is available between
the start tag and the end tag of the action that defines it.
AT_BEGIN, if the scripting variable is available from the start tag
of the action that defines it until the end of the scope.
AT_END, if the scripting variable is available after the end tag
of the action that defines it until the end of the scope.
The scope value for a variable implies what methods may affect its
value and thus where synchronization is needed:
for NESTED, after doInitBody and doAfterBody for a tag handler implementing
BodyTag, and after doStartTag otherwise.
for AT_BEGIN, after doInitBody, doAfterBody, and doEndTag
for a tag handler implementing BodyTag, and doStartTag and doEndTag otherwise.
for AT_END, after doEndTag method.
Variable Information in the TLD
Scripting variable information can also be encoded directly for most cases
into the Tag Library Descriptor using the <variable> subelement of the
<tag> element. See the JSP specification.
Field Summary
static int
AT_BEGIN
Scope information that scripting variable is visible after start tag
static int
AT_END
Scope information that scripting variable is visible after end tag
static int
NESTED
Scope information that scripting variable is visible only within the start/end tags
Constructor Summary
VariableInfo(java.lang.String varName,
java.lang.String className,
boolean declare,
int scope)
Constructor
These objects can be created (at translation time) by the TagExtraInfo
instances.