■ SwitchAction

 Context 내에 여러 개의 모듈이 있을 때  현재 작업중인 모듈에서 다른 모듈로 전환하고 새로운 모듈내의 포워드 하는 일을 수행
.


일반적인 그룹핑은 web.xml 안에서 설정해 놓은 xml 파일들을 아래와 같이 추가하여 사용한다.

  <!-- groupping module -->
 <init-param>  
  <param-name>config</param-name>  <!-- 이름은 아무거나 -->
  <param-value>
   /WEB-INF/struts-config.xml,
   /WEB-INF/struts-config-dispatch.xml,
   /WEB-INF/struts-config-mapping.xml,
   /WEB-INF/struts-config-lookup.xml  
  </param-value>  <!-- /WEB-INF/(기본베이스 - 다른폴더일때는 경로를 설정해주어야 함)폴더 안에 struts-config.xml파일 위치 지정  - 여기까지 작성후 struts-config.xml파일을 생성 -->
 </init-param>

그러나 SwitchAction을 사용하면 아래와 같이 모듈별로 설정을 할 수 있다.

<!-- switch Action module types -->
  <init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/config/struts-config.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/dispatchModule</param-name>
   <param-value>/WEB-INF/config/struts-dispatchModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/lookupModule</param-name>
   <param-value>/WEB-INF/config/struts-lookupModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/mappingModule</param-name>
   <param-value>/WEB-INF/config/struts-mappingModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/uploadModule</param-name>
   <param-value>/WEB-INF/config/struts-uploadModule.xml</param-value>
  </init-param>
  <init-param>
   <param-name>config/validatorModule</param-name>
   <param-value>/WEB-INF/config/struts-validatorModule.xml</param-value>
  </init-param>
   <init-param>
   <param-name>config/tilesModule</param-name>
   <param-value>/WEB-INF/config/struts-tilesModule.xml</param-value>
  </init-param>

web.xml 에 위와 같이 설정을 해주고 각각의 모듈별 xml을 만든다.

위에 보이는 경로대로

/WEB-INF/config/ 폴더 안에 각각의 모듈 xml 파일을 만든다. 여기서 중요한것은 

<init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/config/struts-config.xml</param-value>
  </init-param>

config 가 기본적으로 있어야한다.


그림에서 같이 WEB-INF에(SwitchAction을 사용하지 않은 경우) 있는 xml 파일들이 config 폴더에 모듈별로 들어가 있는 것을 볼 수 있다.

그리고 config 폴더 안에 있는 모든 xml 파일 안에는 아래와 같은 설정이 있어야 한다.

<!-- switchAction을 사용할때는 모든 config파일에 SwitchAction설정이 되어있어야 한다. -->
     <action path="/toModule"
                type="org.apache.struts.actions.SwitchAction"/>

- strus-dispatchModule.xml 파일을 보면.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

    <!-- Form Bean Definitions -->
    <form-beans>
     <form-bean name="infoBean" type="com.myhome.info.beans.InfoFormBean"/>
    </form-beans>

 <!-- Global Exception Definitions -->
 <global-exceptions>
 </global-exceptions>
 
 <!-- Global Forward Definitions -->
 <global-forwards>
 </global-forwards>
 
    <!-- dispatch action mappings -->
 <action-mappings>
 
    <action path="/toModule"
               type="org.apache.struts.actions.SwitchAction"/>
      
    <action path="/index"
         type="org.apache.struts.actions.ForwardAction"
          parameter="/register.jsp"/>
        
    <action path="/dispatchModule"
            name="infoBean"
          scope="request"
          parameter="method"
          unknown="true"
          type="com.myhome.dispatch.InfoDispatchAction">
       <forward name="result"  path="/result.jsp"/>
       <forward name="list"    path="/list.jsp"/>
       <forward name="query"   path="/modify.jsp"/>
       <forward name="update"  path="/template.jsp"/>
       <forward name="delete"  path="/template.jsp"/>
    </action>       
    </action-mappings>
   
 <!-- Controller Processor Definition --> 
 <controller processorClass="com.myhome.info.processor.InfoRequestProcessor"/>

 <!-- Message Resources Definitions -->
 
 <!-- Plug Ins Configuration -->
 <!-- Tiles plugin -->
 <!-- Validator plugin -->
 
</struts-config>


모듈을 변경하는 방법은 URI가 아래와 같다면

http://localhost:8080/toModule.do?prefix=/moduleB&page=/index.do

prefix 가 어느 모듈을 사용하는지를 결정하고, page가 그 모듈에서 어떤 액션을 사용할지를 결정한다.

- jsp 페이지에서 prefix와 page로 파라미터를 전송한다.

<script type="text/javascript">
    function module(prefix, page){
          document.indexform.prefix.value=prefix;
          document.indexform.page.value=page;
          document.indexform.submit();
    }      
 </script> 

<form method="POST" name="indexform" action="toModule.do">
    <input type="hidden" name="prefix">
    <input type="hidden" name="page">  

이렇게 설정을 하고 사용할 모듈과 액션을 보내주면 그에 맞는 모듈이 실행된다.

'FrameWork > Struts1' 카테고리의 다른 글

struts1 커스터마이징하여 사용하기.  (0) 2009.11.11
Struts1 FileDownload  (0) 2009.08.18
Struts1 fileUpload  (0) 2009.08.18
Struts1의 Action 3  (0) 2009.08.16
Struts1의 Action 2  (0) 2009.08.12
Struts1의 Action 1  (0) 2009.07.27
Struts1에서 ActionForm 사용하기.  (0) 2009.07.25
Struts1 에서 iBatis 사용하기  (0) 2009.07.05
Struts 1 을 사용하여 간단한 회원가입, 리스트 불러오기.  (0) 2009.07.05
Struts1 개발환경 설정.  (0) 2009.07.05

+ Recent posts