Info |
---|
The example code for this tutorial, |
Wiki Markup |
{info}The example code for this tutorial, Wildcard_Method_Struts2_Ant or Wildcard_Method_Struts2_Mvn, is available on Code - http://code.google.com/p/struts2-examples/downloads/list After downloading and unzipping the file, you'll have a folder named Wildcard_Method_Struts2_Ant (or Wildcard_Method_Struts2_Mvn). In that folder will be a README.txt file with instructions on now to build and run the example application. {info} h3. Introduction In this tutorial |
Introduction
In this tutorial we'll
...
cover
...
how
...
to
...
configure
...
an
...
action
...
node
...
in
...
the
...
struts.xml
...
configuration
...
file
...
so
...
that
...
one
...
action
...
node
...
can
...
be
...
used
...
to
...
relate
...
several
...
different
...
Action
...
URLs
...
to
...
specific
...
methods
...
of
...
the
...
Action
...
class.
...
This
...
will
...
reduce
...
the
...
number
...
of
...
action
...
nodes
...
we
...
must
...
write
...
in
...
the
...
struts.xml
...
configuration
...
file.
Tip |
---|
} The [ |http://struts.apache.org/mail.html]is an excellent place to get help. If you are having a problem getting the tutorial example applications to work search the Struts 2 mailing list. If you don't find an answer to your problem, post a question on the mailing list. {tip} h3. Example Application The example application that supports this tutorial |
Example Application
The example application that supports this tutorial (Wildcard_Method_Struts2
...
available
...
at
...
http://code.google.com/p/struts2-examples/downloads/list.)
...
shows
...
how
...
to
...
use
...
Struts
...
2's
...
wildcard
...
method
...
selection
...
methodology.
...
The
...
example
...
application
...
is
...
just
...
a
...
simple
...
one
...
that
...
lists
...
some
...
people
...
and
...
lets
...
you
...
edit
...
them,
...
delete
...
them,
...
and
...
add
...
a
...
new
...
person
...
to
...
the
...
list.
...
Everything
...
that
...
the
...
application
...
needs
...
to
...
do
...
with
...
a
...
Person
...
(the
...
model
...
class)
...
is
...
controlled
...
by
...
the
...
Struts
...
2
...
ActionSupport
...
class
...
PersonAction.
...
The
...
PersonAction
...
class
...
has
...
several
...
different
...
methods
...
(e.g.
...
create,
...
edit,
...
delete)
...
that
...
are
...
called
...
depending
...
on
...
what
...
the
...
user
...
wants
...
to
...
do.
...
Wildcard
...
Method
...
Selection
...
Without
...
using
...
the
...
wildcard
...
method
...
selection
...
technique,
...
I'd
...
have
...
to
...
write
...
an
...
action
...
mapping
...
node
...
in
...
the
...
Struts
...
2
...
configuration
...
file
...
for
...
each
...
separate
...
action
...
I'd
...
want
...
to
...
call.
...
For
...
example:
Code Block | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
| ||||||||
} <action name="createPerson" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="create"> <result name="input">input.jsp</result> <result name="success">view.jsp</result> </action> <action name="editPerson" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="edit"> <result name="input">input.jsp</result> <result name="success">view.jsp</result> </action> {code} |
So
...
even
...
for
...
this
...
simple
...
application,
...
I'd
...
have
...
to
...
write
...
four
...
separate
...
action
...
mapping
...
nodes
...
(create,
...
edit,
...
delete,
...
saveOrUpdate)
...
in
...
the
...
configuration
...
file.
...
So
...
you
...
can
...
easily
...
see
...
that
...
a
...
more
...
complex
...
application
...
can
...
have
...
dozens
...
of
...
action
...
mapping
...
nodes.
...
To
...
implement
...
the
...
wildcard
...
method
...
selection
...
technique
...
to
...
enable
...
the
...
Struts
...
2
...
framework
...
to
...
dynamically
...
select
...
the
...
correct
...
method
...
to
...
call
...
at
...
runtime
...
you
...
just
...
need
...
to
...
use
...
the
...
wildcard
...
character,
...
*,
...
in
...
your
...
name
...
value
...
and
...
an
...
attribute
...
value
...
place
...
holder
...
(
...
{1
...
}
...
)
...
for
...
the
...
method
...
value.
...
For
...
example:
Code Block | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
| ||||||||||||
} <action name="*Person" class="org.apache.struts.tutorials.wildcardmethod.action.PersonAction" method="{1}"> <result name="success">view.jsp</result> <result name="input">input.jsp</result> </action> {code} |
The
...
*
...
is
...
the
...
wildcard
...
character.
...
Any
...
action
...
name
...
values
...
that
...
end
...
in
...
"Person"
...
will
...
be
...
handled
...
by
...
this
...
action
...
mapping.
...
Whatever
...
value
...
is
...
before
...
"Person"
...
will
...
be
...
the
...
value
...
used
...
for
...
the
...
method
...
attribute
...
(the
...
{1}
...
place
...
holder
...
will
...
be
...
replaced
...
with
...
that
...
value).
...
For
...
example
...
this
...
URL:
...
http://localhost:8080/Wildcard_Method_Struts_2_Mvn/createPerson.action
...
will
...
be
...
be
...
processed
...
by
...
the
...
the
...
above
...
action
...
mapping
...
and
...
method
...
create
...
of
...
class
...
action.PersonAction
...
will
...
be
...
called.
...
While
...
this
...
URL
http://localhost:8080/Wildcard_Method_Struts_2_Mvn/deletePerson.action
...
will
...
cause
...
the
...
delete
...
method
...
of
...
class
...
action.PersonAction
...
to
...
be
...
called.
...
What
...
happens
...
if
...
we
...
have
...
a
...
URL
...
with
...
nothing
...
in
...
front
...
of
...
Person?
...
For
...
example:
...
http://localhost:8080/Wildcard_Method_Struts_2_Mvn/Person.action
...
If
...
there
...
is
...
no
...
value
...
in
...
front
...
of
...
Person,
...
then
...
the
...
Struts
...
2
...
framework
...
will
...
call
...
the
...
execute
...
method
...
of
...
the
...
class
...
action.PersonAction.
...
Dynamic
...
Method
...
Invocation
...
The
...
wildcard
...
method
...
selection
...
technique
...
explained
...
above
...
should
...
not
...
be
...
confused
...
with
...
the
...
"Dynamic
...
Method
...
Invocation"
...
technique.
...
The
...
Struts
...
2
...
documentation
...
explains
...
this
...
technique
...
(which
...
uses
...
the
...
bang,
...
!,
...
operator
...
in
...
the
...
action
...
name)
...
and
...
recommends
...
against
...
using
...
the
...
"Dynamic
...
Method
...
Invocation"
...
technique
...
due
...
to
...
security
...
and
...
other
...
reasons
...
related
...
to
...
how
...
this
...
technique
...
is
...
implemented
...
internally.
...
The
...
Struts
...
2
...
documentation
...
also
...
recommends
...
turning
...
off
...
the
...
option
...
to
...
use
...
the
...
dynamic
...
method
...
invocation
...
by
...
setting
...
struts.enable.DynamicMethodInvocation
...
to
...
FALSE
...
in
...
the
...
Struts
...
configuration.
...
Summary
By using the wildcard method selection technique explained above, you can significantly reduce the number of action mapping nodes you need to write and manage in the Struts 2 XML configuration file.