3.1.2 Actions

  • xwork.xml 에 설정 한다.
  • Listing 3.1 Action mapping at the most basic level (page40)
    • 환경설정을 할때 기본적으로 action name과 action class를 설정해야 한다.
    • result type이 없으면 , default result type을 실행한다.

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
    <package name="default">
        <action name="login" class="org.hibernate.auction.web.actions.users.Login" />
    </package>
</xwork>

  • Listing 3.2 Login action with two result mappings (page41)
    • webwork-default.xml 파일을 include 하였다.
    • default interceptor로 defalutStack를 지정하였다. defalutStack은 webwork-default.xml에 정의되어 있음
    • Login action에서 반환되는 값이 input인지 success인지에 따라서 서로 다르게 처리한다.

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>

    <include name="webwork-default.xml"/>
    
    <package name="default" extends="webwork-default">
        <default-interceptor-ref name="defaultStack"/>

        <action name="login" class="org.hibernate.auction.web.actions.users.Login">
            <result name="input">login.jsp</result>
            <result name="success" type="redirect">/secure/dashboard.action</result>
        </action>
    </package>
    
</xwork>

Aliasing actions (page42)

  • 하나의 액션클래스에 여러 별칭들을 적용하여 사용할 수 있음
  • 동일한 액션 클래스에 mehtod를 지정하여 서로 다른메소드를 호출 할 수 있다.
  • mehtod를 지정하지 않으면 execute() 메소드가 호출된다.
  • Listing 3.3 Search action class aliased twice with different configurations
    • search 액션 요청시 execute() 메소드 실행
    • moreResults 액션 요청시moreResults() 메소드 실행

<action name="search" class="org.hibernate.auction.web.actions.Search">
    <interceptor-ref name="default"/>
    <interceptor-ref name="execAndWait"/>
    <result name="wait">search-wait.jsp</result>
    <result name="success" type="redirect">moreResults.action</result>
</action>
<action name="moreResults" class="org.hibernate.auction.web.actions.Search" method="moreResults">
    <result name="success">search.jsp</result>
</action>


public class Search extends ActionSupport implements ItemDAOAware, SessionAware {

    public static final String RESULTS = "__search_results";
    List items;
    String query;
    int page = 1;
    int pages;
    ItemDAO itemDAO;
    Map session;

    public String execute() throws Exception {
        List results = itemDAO.search(query);
        session.put(RESULTS, results);
        cutPage(results);
        return SUCCESS;
    }
    
    public String moreResults() throws Exception {
        List results = (List) session.get(RESULTS);
        cutPage(results);
        return SUCCESS;
    }

}

Aliasing without configuration (page44)

  • action uri에 메소드명을 붙여서 환경설정을 하나만 하고 여러개의 메소드를 호출 할 수 있다.
  • name!method.action 이와 같이 사용할 수 있음 (name은 action이름, method는 메소드 명)
  • search.action 요청시 execute()가 실행 된다.
  • search!moreResults.action 요청시 moreResults() 메소드가 실행된다

Customizing actions with parameters(page44)

  • param을 설정하여 Action에 파라미터를 전달할 수 있다.
  • 아래 예제는 WebServiceAction에 url, timeout 값이 파라미터로 전달됨

<action name="service" class="com.example.WebServiceAction">
    <result name="success">/success.jsp</result>
    <param name="url">http://somesite.com/service.wsdl</param>
    <param name="timeout">30</param>
</action>


public class WebServiceAction {
    private String url;
    private long timeout;
    
    public void setUrl(String url) {
        this.url = url;
    }
    
    public void setTimeout(long timeout) {
        this.timeout = timeout;
    }

    public String execute() {
        // perform task here
    }
}

문서에 대하여

  • 이 문서의 내용은 Webwork In Action 교재를 스터디 하면서 정리한 내용 입니다.
  • 최초작성자 : 김정식
  • 최초작성일 : 2007년 9월 20일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^