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 have an associated scope of
either AT_BEGIN, NESTED, or AT_END.
The class name (VariableInfo.getClassName) in the returned objects is used to
determine the types of the scripting variables. Note that because scripting
variables are assigned their values from scoped attributes which cannot be of
primitive types, "boxed" types such as
java.lang.Integer
must be used instead of primitives.
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.4
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. The class must also be in the
CLASSPATH for the Web Application (see Servlet 2.4 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 2.0 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 as illustrated by the table below.
Note: the synchronization of the variable(s) will occur
after
the respective method has been called.
Variable Synchronization
Points
|
 |
doStartTag() |
doInitBody() |
doAfterBody() |
doEndTag() |
doTag() |
Tag
|
AT_BEGIN, NESTED
|
|
|
AT_BEGIN, AT_END
|
|
IterationTag
|
AT_BEGIN, NESTED
|
|
AT_BEGIN, NESTED
|
AT_BEGIN, AT_END
|
|
BodyTag
|
AT_BEGIN,
NESTED1
|
AT_BEGIN,
NESTED1
|
AT_BEGIN, NESTED
|
AT_BEGIN, AT_END
|
|
SimpleTag
|
|
|
|
|
AT_BEGIN, AT_END
|
1 Called after doStartTag()
if
EVAL_BODY_INCLUDE
is returned, or after
doInitBody()
otherwise.
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.