Action.java

此类为action的继承的类,其中主要以下几个方法:
1)execute
2)addErrors
3)addMessages
4)saveErrors
5)saveMessages

其中excute方法为
public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
        return null;
    }
    是真正要调用执行的方法,因此在继承后要重写此方法,action类中的execute什么都没做,只是返回了一个null
    如果我们在继承的action类中,不重写此方法,那么我们自己的action将什么也不做。很显然struts是通知这个方法
    作为入口来执行我的action部门,包括把参数传入逻辑类(javabean)和进行转向等操作。
   
addErrors和saveErrors已被addMessages和saveMessages取代,
而addMessages和saveMessages的作用就是把一些信息返回给前台,用于<html:messages显示用的。
-----------------------------------------------------------------------------------------------
  protected void addMessages(HttpServletRequest request,
        ActionMessages messages) {
        if (messages == null) {
            //  bad programmer! *slap*
            return;
        }

        // get any existing messages from the request, or make a new one
        ActionMessages requestMessages =
            (ActionMessages) request.getAttribute(Globals.MESSAGE_KEY);
        //Globals.MESSAGE_KEY为org.apache.struts.action.ACTION_MESSAGE

        if (requestMessages == null) {
            requestMessages = new ActionMessages();
        }

        // add incoming messages
        requestMessages.add(messages);

        // if still empty, just wipe it out from the request
        if (requestMessages.isEmpty()) {
            request.removeAttribute(Globals.MESSAGE_KEY);

            return;
        }

        // Save the messages
        request.setAttribute(Globals.MESSAGE_KEY, requestMessages);
    }
   
    注:addMessages的主要作用,就是把定义的ActionMessages加入到request中去。同时如果request中原来有的话,将会合并远来的ActionMessages
    然后再保存在request中。
   
   
    而saveMessages不同,他会在保存前把原来相同的名称ActionMessages进行清除,然后保存自己,因此可以确定saveMessages永远
    只保存最后一个ActionMessages到request中。
    --------------------------------------------------------------------------------------------------------
      protected void saveMessages(HttpServletRequest request,
        ActionMessages messages) {
        // Remove any messages attribute if none are required
        if ((messages == null) || messages.isEmpty()) {
            request.removeAttribute(Globals.MESSAGE_KEY);

            return;
        }

        // Save the messages we need
        request.setAttribute(Globals.MESSAGE_KEY, messages);
    }

说明:saveMessages有两个名称相同,但参数不同的方法。有一个是把ActionMessages保存在request中,有一个保存在session中。

你可能感兴趣的:(java,apache,html,struts)