首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

DispatchAction 到底如何使用的

2013-04-05 
DispatchAction 到底怎么使用的啊我按照网上说的 首先是类继承DispatchAction ,然后写了些测试代码 代码如

DispatchAction 到底怎么使用的啊
我按照网上说的 首先是类继承DispatchAction ,然后写了些测试代码 代码如下:


public class LoginAction extends DispatchAction { //继承了DispatchAction

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

request.getSession().setAttribute("operation", "execute");
return mapping.findForward("error.jsp");
}
//login方法
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

request.getSession().setAttribute("operation", "login");
return mapping.findForward("error.jsp");
}
//register方法
public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

request.getSession().setAttribute("operation", "register");
return mapping.findForward("error.jsp");
}
}


然后struts配置文件中parameter="operation"

<action
    path="/login"
    type="com.mulan.struts.action.LoginAction"
    scope="request"
    input="/index.jsp"
    validate="false"
    parameter="operation" >
</action>


然后index.jsp文件

<form action="login.do?operation='login'" method="post">
  用户名:<input type="text" name="temail"><br>
  密码:<input type="password" name="tpass"><br>
  <input type="submit" value="登录">&nbsp;&nbsp;
  <a href="register.jsp">加入我们</a>
</form>


照理来说 提交以后 应该调用login方法,可是好像没反应.
地址栏上的地址变成了 [path]/login.do?operation='login'
[解决办法]
DispatchAction继承自Action类,它是一个抽象类,封装了一些基础方法,来解决使用一个Action处理多个操作的能力,这就是DispatchAction最大的用途,它可以帮助我们用一个Action类,封装一套类似的操作方法,节省了类的数目,同时也减轻了后期维护的困难。

struts1.x里面的
[解决办法]
<form action="login.do?operation=login" method="post">

去掉引号
[解决办法]
不是用!号吗?难道用?号
[解决办法]
<form action="login!login" method="post">应该是这样。
[解决办法]
execute  方法中 接受  operation的值,  然后判断是login了 传入 login判断中
[解决办法]
这是dispatchaction的execute方法。 我刚看了下。 dispatchaction应该就是通过她本书execute方法来实现一个类实现多个功能。

    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
        if (isCancelled(request)) {
            ActionForward af = cancelled(mapping, form, request, response);



            if (af != null) {
                return af;
            }
        }

        // Get the parameter. This could be overridden in subclasses.
        String parameter = getParameter(mapping, form, request, response);

        // Get the method's name. This could be overridden in subclasses.
        String name =
            getMethodName(mapping, form, request, response, parameter);

        // Prevent recursive calls
        if ("execute".equals(name) 
[解决办法]
 "perform".equals(name)) {
            String message =
                messages.getMessage("dispatch.recursive", mapping.getPath());

            log.error(message);
            throw new ServletException(message);
        }

        // Invoke the named method, and return the result
        return dispatchMethod(mapping, form, request, response, name);
    }




还有6楼写的那个是struts2里面的。 那个!可以直接调用action里的方法

热点排行