DispatchAction
provides a mechanism for grouping a set of related functions into a single
action, thus eliminating the need to create seperate actions for each
functions. In this example we will see how to group a set of user related
actions like add user, update user and delete user into a single action called
UserAction.
The class
UserAction extends org.apache.struts.actions.DispatchAction. This class does
not provide an implementation of the execute() method as the normal Action
class does. The DispatchAction uses the execute method to manage delegating the
request to the individual methods based on the incoming request parameter. For
example if the incoming parameter is "method=add", then the add
method will be invoked. These methods should have similar signature as the
execute method.
01.public class UserAction extends DispatchAction {
02.
03.private final static String SUCCESS = "success";
04.
05.public ActionForward add(ActionMapping mapping, ActionForm form,
06.HttpServletRequest
request, HttpServletResponse response)
07.throws Exception {
08.UserForm userForm =
(UserForm) form;
09.userForm.setMessage("Inside
add user method.");
10.return mapping.findForward(SUCCESS);
11.}
12.
13.public ActionForward update(ActionMapping mapping, ActionForm form,
14.HttpServletRequest
request, HttpServletResponse response)
15.throws Exception {
16.UserForm userForm =
(UserForm) form;
17.userForm.setMessage("Inside
update user method.");
18.return mapping.findForward(SUCCESS);
19.}
20.
21.public ActionForward delete(ActionMapping
mapping, ActionForm form,
22.HttpServletRequest
request, HttpServletResponse response)
23.throws Exception {
24.UserForm userForm =
(UserForm) form;
25.userForm.setMessage("Inside
delete user method.");
26.return mapping.findForward(SUCCESS);
27.}
28.}
If you notice the
signature of the add, update and delete methods are similar to the execute
method except the name. The next step is to create an action mapping for this
action handler. The request parameter name is specified using the parameter
attribute. Here the request parameter name is method.
1.<action-mappings>
2.<action input="/index.jsp" parameter="method" name="UserForm"path="/UserAction" scope="session" type="com.vaannila.UserAction">
3.<forward name="success" path="/index.jsp" />
4.</action>
5.</action-mappings>
Now lets see how to
invoke a DispatchAction from jsp. We have a simple form with three buttons to
add, update and delete a user. When each button is clicked a different method
in UserAction class is invoked.
01.<html>
02.<head>
03.<script type="text/javascript">
04.function submitForm()
05.{
06.document.forms[0].action
= "UserAction.do?method=add"
07.document.forms[0].submit();
08.}
09.</script>
10.</head>
11.<body>
12.<html:form action="UserAction" >
13.<table>
14.<tr>
15.<td>
16.<bean:write name="UserForm" property="message" />
17.</td>
18.</tr>
19.<tr>
20.<td>
21.<html:submit value="Add" onclick="submitForm()" />
22.</td>
23.</tr>
24.<tr>
25.<td>
26.<html:submit property="method" value="update" />
27.</td>
28.</tr>
29.<tr>
30.<td>
31.<html:submit property="method" >delete</html:submit>
32.</td>
33.</tr>
34.</table>
35.</html:form>
36.</body>
37.</html>
Now consider the
update and the delete button. The request parameter name specified in the
action handler is "method". So this should be specified as the
property name for the submit button. The name of the method to be invoked and
the value of the button should be the same. So when the button is clicked the
corresponding method in the UserAction will be called. The delete button shows
an alternate way to specify the value of the button.
Here the main constraint is the
method name and the button name should be same. So we can't have an update
button like this "Update". Inorder to avoid this you can call a
javascript function on click of the button. Specify the action and submit the
form from javascript. In this way we can have a different button name and
method name. On click of the Add button the action value is set to "UserAction.do?method=add" and the form
is submitted from javascript.
Struts 1.2 All Examples with source code

No comments:
Post a Comment