初識Struts(四)----ActionForward


ActionForwardの使用
 
1、ActionForwardはステアリング情報を含む
  
2、グローバルforwardとローカルforward
*グローバルforwardは、複数のアクションが処理された後、あるページに移動する場合は、そのページをグローバルforwardに設定します.
  <global-forwards>
       <forward name="login" path="/login.jsp" redirect="true"/>
  </global-forwards>

 
*ローカルforward:
     <action path="/login" 
             type="cn.huan.struts.LoginAction"
             name="loginForm"
             scope="request"
             >
           <forward name="success" path="/login_success.jsp"/>
           <forward name="error" path="/login_error.jsp"/>
      </action>

 
        * mapping.findForwardメソッドは、まず構成内のローカルforwardを自動的に探し、なければグローバルforwardを探します.
         
  
3、転送とリダイレクト
ステアリング:同じrequest
リダイレクト:redirect=「true」を設定し、新しいrequestを作成する必要があるためurlを変更しました
         
4、転送とリダイレクトはstrutsが提供するActionForwardを使わずに自分で定義できる
        
アクションでのステアリングのカスタマイズ:
RequestDispatcher dispatcher = request.getRequestDispatcher("/mustlogin.jsp");
dispatcher.forward(request, response);
return null;

 
 
アクションでリダイレクトをカスタマイズするには、次の手順に従います.
response.sendRedirect(request.getContextPath() + "/login.jsp");
return null;

 
 
              
   5、struts-config.xmlファイルとweb.xmlファイルは実行時に動的に変更できません.つまり、Actionで構成された属性値を変更することはできません.
 
  
6、動的ActionForward
Actionコードの変更や構成の追加は不要
 
 
      
たとえば、ページに入力された値に基づいて異なるページに動的にジャンプする必要がある場合は、次のようにします.
   <form action="dynaactionforward.do" method="post">
        :<input type="text" name="page"><br>
      <input type="submit" value="  ">
   </form>

 
 
          
 
 
動的ActionForwardを使用すると、Actionと構成情報はそれぞれ(注釈部分が動的ActionFormを使用していない場合のコードである):
アクションコード:
package cn.huan.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *   ActionForwad  
 * @author    
 *
 */
public class DynaActionForwardTestAction extends Action {

	/* (non-Javadoc)
	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		String page = request.getParameter("page");
//		ActionForward af = null;
//		if("1".equals(page)){
//			af = mapping.findForward("page1");
//		}else if("2".equals(page)){
//			af = mapping.findForward("page2");
//		}
//		return af;
		
		//  ActionForward
		ActionForward af = new ActionForward();
		af.setPath("/page" + page + ".jsp");
		return af;
	}

}

 
構成情報:
      <action path="/dynaactionforward"
              type="cn.huan.struts.DynaActionForwardTestAction">
              <!-- 
              <forward name="page1" path="/page1.jsp"/>
              <forward name="page2" path="/page2.jsp"/>
               -->
      </action>