Programming Jakarta Struts, 2nd Edition [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Programming Jakarta Struts, 2nd Edition [Electronic resources] - نسخه متنی

Chuck Cavaness

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید








8.5 Logic Tags


The Logic tag library contains tags that are
useful for managing conditional generation of output text, looping
over object collections for repetitive generation of output text, and
application flow management. Table 8-5 lists the
tags available within the Logic tag library.

Table 8-5. Custom tags within the Logic tag library

Tag name


Description


empty


Evaluate the nested body content of this tag if the requested
variable is either null or an empty string.


equal


Evaluate the nested body content of this tag if the requested
variable is equal to the specified value.


forward


Forward control to the page specified by the
ActionForward entry.


greaterEqual


Evaluate the nested body content of this tag if the requested
variable is greater than or equal to the specified value.


greaterThan


Evaluate the nested body content of this tag if the requested
variable is greater than the specified value.


iterate


Repeat the nested body content of this tag over a specified
collection.


lessEqual


Evaluate the nested body content of this tag if the requested
variable is less than or equal to the specified value.


lessThan


Evaluate the nested body content of this tag if the requested
variable is less than the specified value.


match


Evaluate the nested body content of this tag if the specified value
is an appropriate substring of the requested variable.


messagesNotPresent


Generate the nested body content of this tag if the specified message
is not present in this request.


messagesPresent


Generate the nested body content of this tag if the specified message
is present in this request.


notEmpty


Evaluate the nested body content of this tag if the requested
variable is neither null nor an empty string.


notEqual


Evaluate the nested body content of this tag if the requested
variable is not equal to the specified value.


notMatch


Evaluate the nested body content of this tag if the specified value
is not an appropriate substring of the requested variable.


notPresent


Generate the nested body content of this tag if the specified value
is not present in this request.


present


Generate the nested body content of this tag if the specified value
is present in this request.


redirect


Render an HTTP redirect.

The tags within the Logic tag library can be divided into four
separate categories based on how they are used:

  • Value comparison

  • Substring matching

  • Redirecting and forwarding

  • Collection utilities


This division into categories is done for the purpose of explanation.
The tags are not packaged or arranged into these categories; they all
belong to the Logic package.


8.5.1 Value Comparison


The value-comparison
tags print out the body of the tag if and only if the comparison
evaluates to true. There are several different types of comparison
tags that you can use, depending on your specific needs.

Each of the value-comparison tags takes a value and compares it to
the value of a comparison attribute. If the value given can be
successfully converted to a number, a number comparison is performed;
otherwise, a string comparison is performed.

The comparison tags share the common attributes listed in Table 8-6.

Table 8-6. Common attributes of the comparison tags

Name


Description


name


The name of a bean to use to compare against the
value attribute. If the
property attribute is used, the value is compared
against the property of the bean, instead of the bean itself.


parameter


The name of a request parameter to compare the
value attribute against.


property


The variable to be compared is the property (of the bean specified by
the name attribute) specified by this attribute.
The property reference can be simple, nested, and/or indexed.


scope


The scope within which to search for the bean named by the
name attribute. All scopes will be searched if not
specified.


value


The constant value to which the variable, specified by another
attribute(s) of this tag, will be compared.

A few examples will help solidify how these comparison tags can be
used. To check whether a particular request parameter is present, you
can use the Logic present tag:

<logic:present parameter="id">
<!-- Print out the request parameter id value -->
</logic:present>

To check whether a collection is empty before iterating over it, you
can use the notEmpty tag:

<logic:notEmpty name="userSummary" property="addresses">
<!-- Iterate and print out the user's addresses -->
</logic:notEmpty>

Finally, here's how to compare a number value
against a property within an ActionForm:

<logic:lessThan property="age" value="21">  
<!-- Display a message about the user's age -->
</logic:lessThan>


8.5.2 Substring Matching


The substring-matching tags take all the
same arguments as the value-comparison tags. You compare the string
specified by the value attribute to any of the comparison values you
give it, specified by cookie,
header, parameter,
property, or name. Matching
tags also have an additional location attribute that informs the tag
where to start matching from (either
"start" or
"end").

In this example, the matchTag is being used to
determine whether the request parameter action begins with the string
"processLogin":

<logic:matchTag parameter="action" value="processLogin" location="start">
Processing Login....
</logic:matchTag>

If the location attribute is not specified, a
match between the variable and the value may occur at any position
within the variable string.


8.5.3 Redirecting and Forwarding


The
forward and
redirect tags within the Logic
tag library might have been better suited to the HTML tag library.
However, the fact that they are in the Logic tag library
doesn't make them any less valuable. In fact,
combined with one of the other Logic tags, these two tags become
extremely useful.

The redirect tag is responsible for sending a
redirect to the client's browser, complete with
URL-rewriting if the container supports it. Its attributes are
consistent with the Struts HTML link tag. The base
URL is calculated based on which of the following attributes you
specify (you must specify exactly one of them):

forward


Use the value of this attribute as the name of a global
ActionForward to be looked up, and use the
context-relative URI found there.


href


Use the value of this attribute unchanged.


page


Use the value of this attribute as a context-relative URI, and
generate a server-relative URI by including the context path.



The forward tag is responsible for either
redirecting or forwarding to a specified global
ActionForward. The forward tag
has one attribute, name, which is the logical name
of the ActionForward from the configuration file.


8.5.4 Collection Utilities


One of the most useful and most widely
used tags within the Struts tag libraries is the
iterate
tag. The iterate tag is responsible for executing
its body content once for every element inside the specified
collection. It has one required attribute:

id


The name of a page-scope JSP bean that will contain the current
element during an iteration.



An example is the best way to understand how to use the
iterate tag:

<logic:iterate id="address" name="userSummary" property="addresses">
<!-- Print out the address obejct in a table -->
</logic:iterate>

Here, the iterate tag will get the collection of
addresses by calling the getAddresses() method on
the userSummary bean. During each iteration, an
individual address will be assigned to the address
variable. This variable can be used inside the body of the
iterate tag as if you had assigned it directly.
During the next iteration, the next address object will be assigned
to the address variable. This continues until the
entire collection of addresses has been traversed.

The iterate tag is very flexible in terms of where
it gets the collection to iterate over. The attributes that control
how the iterate tag performs this behavior are
listed in Table 8-7.

Table 8-7. Attributes of the iterate tag

Name


Description


collection


A runtime expression that evaluates to a collection (conforming to
the requirements listed above) to be iterated over.


id


The name of a page-scope JSP bean that will contain the current
element of the collection on each iteration, if it is not null.


indexed


The name of a page-scope JSP bean that will contain the current index
of the collection on each iteration.


length


The maximum number of entries (from the underlying collection) to be
iterated through on this page. This can be either an integer that
directly expresses the desired value, or the name of a JSP bean (in
any scope) of type java.lang.Integer that defines
the desired value. If not present, there is no limit on the number of
iterations performed.


name


The name of the JSP bean containing the collection to be iterated
over (if property is not specified), or the JSP
bean whose property getter returns the collection to be iterated over
(if property is specified).


offset


The zero-relative index of the starting point at which entries from
the underlying collection will be iterated through. This can be
either an integer that directly expresses the desired value, or the
name of a JSP bean (in any scope) of type
java.lang.Integer that defines the desired value.
If not present, zero is assumed (meaning that the collection will be
iterated from the beginning).


property


The name of the property of the JSP bean specified by
name whose getter returns the collection to be
iterated.


scope


The bean scope within which to search for the bean named by the
name property, or "any
scope" if not specified.


type


The fully qualified class name of the element to be exposed through
the JSP bean named from the id attribute. If not
present, no type conversions will be performed. The elements of the
collection must be assignment-compatible with this class, or a
request-time ClassCastException will occur.


8.5.5 Messages and Errors


The
messagesPresent and
messagesNotPresent tags evaluate
the body content, depending on whether an
ActionMessages or ActionErrors
object is present in the request scope. Table 8-8
lists the attributes of these two tags.

Table 8-8. Attributes of the messagesPresent and messagesNotPresent tags

Name


Description


name


The parameter key to retrieve the message from request scope.


property


The name of the property for which messages should be retrieved. If
not specified, all messages (regardless of property) are retrieved.


message


By default the tag will retrieve the request-scope bean it will
iterate over from the Action. ERROR_KEY constant
string, but if this attribute is set to true, the
request-scope bean will be retrieved from the
Action.MESSAGE_KEY constant string. Also, if this
is set to true, any value assigned to the
name attribute will be ignored.


    / 181