What is difference between LookupDispatchAction and DispatchAction in Struts

difference Between LookupDispatch and DispatchAction in Struts


The difference between LookupDispatchAction and DispatchAction is that the actual method that gets called in LookupDispatchAction is based on a lookup of a key value instead of specifying the method name directly.
Details :
LookupDispatchAction is subclass of DispatchAction. In case of DispatchAction, you have to declare the method name in the JSP page.
For Example:

http://localhost:8080/emp/empaction.do?step=add // IN CASE OF DispatchAction
here step=add, we are delaring method name in JSP.
Or

<html: submit property="step">Add</html: submit> //IN CASE OF DispatchAction

so we can't use localization for button. To over come both the issues below
a)method name declaration in JSP
b)can't use localization for button
We will go for LookupDispatchAction.
In the LookupDispatchAction :
For example :
If there are three operation like add, delete, update employee.
You can create three different ActionsAddEmpAction, DeleteEmpAction and
UpdateEmpAction. This is a valid approach, although not elegant since there might be duplication of code across the Actions since they are related. LookupDispatchAction is the answer to this problem. With LookupDispatchAction, you can combine all three
Actions into one.

Example :
Step 1:
three buttons might be

<html:submit property="step">
<bean:message key="button.add"/>
</html:submit>
<html:submit property="step">
<bean:message key="button.delete"/>
</html:submit>
<html:submit property="step">
<bean:message key="button.update"/>
</html:submit>

//No need method name declaration in JSP . Button name from resource bundle.

Step 2:
In the the Resource Bundle. //Here you can add localization.

button.add=Add
button.delete=Delete
button.update=Update


Step 3:
Implement a method named getKeyMethodMap() in the subclass of the
LookupDispatchAction. The method returns a java.util.Map. The keys used in the Map
should be also used as keys in Message Resource Bundle.

public class EmpAction extends LookupDispatchAction {
public Map getKeyMethodMap()
{
Map map = new HashMap();
map.put("button.add", "add");
map.put("button.delete", "delete");
map.put("button.update", "update");
}
public ActionForward add(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
//your logic
mapping.findForward("add-success");
}
public ActionForward delete(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
//your logic
mapping.findForward("delete-success");
}
public ActionForward update(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
//your logic
mapping.findForward("update-success");
}
}

in struts-config.xml

<action path="/empaction"
input="/empform.jsp"
type="list.EmpAction"
parameter="step"
scope="request"
validate="false">
<forward name="add-success"
path="addEmpSuccess.jsp"
redirect="true"/>
<forward name="delete-success"
path="deleteEmpSuccess.jsp"
redirect="true"/>
<forward name="update-success"
path="updateEmpSuccess.jsp"
redirect="true"/>
</action>

for every form submission, LookupDispatchAction does the reverse lookup on the resource bundle to get the key and then gets the method whose name is associated with the key from getKeyMethodmap().
Flow of LookupDispatchAction:
a) Form the button name "Add" get the key "button.add" fro resource bundle.
b) then in the Map getKeyMethodMap() find the value associated with the key
"button.add".
c) value from the Map is "add" . then call add() method of the same action class.


Related Topic Difference between DispatchAction and LookupDispatchAction?
different Type of Actions in Struts2 Struts1
Struts 1 vs Struts2 Difference Performance
What is DispatchAction in Struts?
Struts Use of LookupDispatchAction
Struts  

nScraps.com 2011   Privacy Policy  Terms of Service  Feedback