struts1.0 dispatchAction、全局跳转、动态表单

Part 1 dispatchAction-分派action
 
1)在使用Struts动作时,每一个Action都需要编写一个类,并且要在struts-config.xml进行配置。这对于一个拥有很多Action的Web程序来说,工作量是非常大的。为此,Struts提供了DispatchAction类,这个类允许将一个Action作为一个方法来调用。在Web浏览器中通过请求参数来指定要调用的动作。 
  2)虽然DispatchAction类是一个抽象类,但其中却没有一个抽象方法。因此,DisplatchAction的子类不用实现任何DisplatchAction类中的方法。但是,使用分派action,往往需要自己重新命名函数

/*DispatchAction的Action方法除了方法名和execute方法不一样外,其他的都和execute方法完全一样,
Action方法名必须和用于指定动作的请求参数值一致*/
public class LoginAndLogoutAction extends DispatchAction {
         //该函数用于响应登录请求
         public ActionForward userLogin(ActionMapping mapping,ActionForm form,HttpServletRequest request,
HttpServletResponse response) {
         UserForm userForm=(UserForm) form;
         if("123".equals.(userForm.getPassword())){
          return mapping.findForward("loginok");
         }else{
          return mapping.findForward("gologin");
         }
         }
        //该函数用于响应注销请求
         public ActionForward userLogout(ActionMapping mapping,ActionForm form,HttpServletRequest request,
HttpServletResponse response) {
         //把用户的Session清空
         request.getSession().invalidate();
          return mapping.findForward("gologin");
         }


struts-config.xml中,parameter的属性值是用来区分用户的不同的请求。

//这个在struts-config.xml设计模式里new Action自动配好DispatchAction自动生成
<action-mappings>
         <action 
           attribute="userForm"
           input="/WEB-INF/ok.jsp"
           name="userForm"
           parameter="flag"          
           path="/loginAndLogout"
           scope="request"
          type="com.cy.struts.action.LoginAndLogoutAction"
          validate="false"  />    
          <forward name="loginok" path="/WEB-INF/ok.jsp"/>
          <forward name="gologin" path="/WEB-INF/login.jsp"/>
         </action>
</action-mappings>


映射关系图: 
struts1.0 dispatchAction、全局跳转、动态表单_第1张图片

Part 2 全局跳转 
  可直接在struts-config.xml自动选中,参数设为goErr,连接到err.jsp,则所有的对应为goErr的action都跳转到err.jsp

 <global-results>   
              <result name=”ok”>/ok.jsp</result>   
         </global-results> 

Part 3 动态表单
 
在某些不确定表单的个数和类型的情况下,使用动态表单(Dynamic Form)来解决问题。 
 
动态表单类与普通表单类的区别: 
  1、普通表单actionForm是首先你需要定义这样一个类,然后配置到struts-config.xml中 
  2、动态表单完全依赖发射机制创建,所以不要去定义表单类,直接在struts-config.xml中配置即可

//如何在struts-config.xml配置动态表单
<form-beans>
<form-bean name="userForm" type="org.apache.struts.action.DynaActionForm">
<!--该表单的属性是配置出来的-->
<form-property name="name" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
<form-property name="email" type="java.lang.String"/>
</form-bean>
</form-beans>
//在action中从动态表单中取数据
   public ActionForward register(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
         DynaActionForm userForm=(DynaActionForm) form;
         String name=userForm.get("name").toString();
         String password=userForm.get("password").toString();
         String email=userForm.getString("name")
         return mapping.findForward("registerok");
}



你可能感兴趣的:(struts1.0 dispatchAction、全局跳转、动态表单)