LookupDispatchAction类处理一个form多个submit

ACTION中重定向

@Override
public String list() throws Exception {
    HttpServletRequest request = ServletActionContext.getRequest();
    String loginName = request.getParameter("j_username");
    String password = request.getParameter("j_password");
    HttpSession session = request.getSession();
    session.setAttribute("username", loginName);
    session.setAttribute("password", password);
        
//你要转向的页面的地址.

    String url = new String( ("../j_spring_security_check?j_username="
        +java.net.URLEncoder.encode(loginName)
        +"&j_password="+password).getBytes("UTF-8"),"ISO8859_1");

    //你要转向的页面的地址.
    HttpServletResponse response = ServletActionContext.getResponse();
    response.sendRedirect(url);
   
//重定向后,别忘了返回null值,而不能再返回return    

    //mapping.findForward("****");      
    return null;
    
//return SUCCESS;            

}

有时在HTML form中需要提供多个提交按钮,这时LookupDispatchAction类就派上用场了。LookupDispatchAction是DispatchAction的子类,用于处理客户端代码中有一个Form含有多个提交按钮的情况。为了使用LookupDispatchAction,首先来编写客户端代码,代码如下:

 

<html:form action="myaction">
     
   
<html:submit property="action">
       
<bean:message key="submit.print" />
   
</html:submit>
   
<html:submit property="action">
       
<bean:message key="submit.save" />
   
</html:submit>
</html:form>

    其中submit.print和submit.save是属性文件中的key.action实际上是提交按钮的name属性值。在提交时,会将property和<bean:message key="……" />作为请求参数和参数值传给Struts动作。如save按钮被单击时,请求URL为http://localhost:8080/……/myaction.do?action=save.其中save为submit.save在属性文件中对应的属性值,也就是说submit.save = save.

    接下来我们编写一个LookupDispatchAction的子类,代码如下:

 

package action;
import
 org.apache.struts.actions.LookupDispatchAction;
 
  
public class MyLookupDispatchAction extends
 LookupDispatchAction
  {
      
//
  为了方便描述,在这里未使用属性文件,只是直接将key和value的映射添加到Map对象中
      
//
  读者可以在getKeyMethodMap方法中从属性文件中读取相应的key-value对
      
//  来添加到Map对象中

      protected Map getKeyMethodMap()
      {
          Map m 
= new
 HashMap();
          m.put(
"submit.print""print"
);
          m.put(
"submit.save""save"
);
          
return
 m;
      }
      
public
 ActionForward print (ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response)
      {
          
// 处理print代码

      } 
      
public
 ActionForward save(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response)
      {
          
// 处理save代码

      } 
  }

    在编写LookupDispatchAction的子类时要注意必须实现getKeyMethodMap方法,在这个方法中需要进行key和Action方法的映射。下面的代码用来配置MyLookupDispatchAction.

 

<action path="/moresubmit" type="action.MyLookupDispatchAction" parameter="action" />

    其中parameter属性指定了请求URL中由提交按钮生成的请求参数名

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