sitelink1  
sitelink2  
extra_vars5  
extra_vars6  
package com.ibatis.struts;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;

/**
* BeanAction is an extension to the typical Struts Action class that
* enables mappings to bean methods.  This allows for a more typical
* Object Oriented design where each object has behaviour as part of
* its definition.  Instead of writing separate Actions and Forms,
* BeanAction allows you to simply have a Bean, which models both
* the state and the methods that operate on that state.
*
* In addition to the simpler packaging, BeanAction also simplifies the
* Struts progamming paradigm and reduces dependency on Struts.  Using
* this pattern could allow easier migration to newer frameworks like JSF.
*
* The method signatures are greatly simplified to the following
*
* public String myActionMethod() {
*   //..work
*   return "success";
* }
*
* The return parameter becomes simply the name of the forward (as defined
* in the config file as usual).  Form parameters, request, response, session,
* attributes, and cookies are all accessed via the ActionContext class (see the
* ActionContext javadocs for more).
*
* The forms that you map to a BaseAction mapping must be a subclass of the
* BaseBean class.  BaseBean continues to simplify the validation and
* reset methods by removing the parameters from the signature as was done with
* the above action method example.
*
* There are 3 ways to map a BeanAction in the struts configuration file.
* They are as follows.
*
* URL Pattern
*
* This approach uses the end of the action definition to determine which
* method to call on the Bean.  For example if you request the URL:
*
* http://localhost/jpetstore4/shop/viewOrder.do
*
* Then the method called would be "viewOrder" (of the mapped bean as specified
* by the name="" parameter in the mapping below).  The mapping used for this
* approach is as follows.
*
*  <action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
*    name="orderBean" scope="session"
*    validate="false">
*    <forward name="success" path="/order/ViewOrder.jsp"/>
*  </action>
*  위와 같은 xml문장은 orderBean클래스의 viewOrder메서드를 호출하게 된다.
*
* Method Parameter
*
* This approach uses the Struts action parameter within the mapping
* to determine the method to call on the Bean.  For example the
* following action mapping would cause the "viewOrder" method to
* be called on the bean ("orderBean").  The mapping used for this
* approach is as follows.
*
*  <action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
*    name="orderBean" parameter="viewOrder" scope="session"
*    validate="false">
*    <forward name="success" path="/order/ViewOrder.jsp"/>
*  </action>
*
* No Method call
*
* BeanAction will ignore any Struts action mappings without beans associated
* to them (i.e. no name="" attribute in the mapping).  If you do want to associate
* a bean to the action mapping, but do not want a method to be called, simply
* set the parameter to an asterisk ("*").  The mapping used for this approach
* is as follows (no method will be called).
*
*  <action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
*    name="orderBean" parameter="*" scope="session"
*    validate="false">
*    <forward name="success" path="/order/ViewOrder.jsp"/>
*  </action>
*
*
* A WORK IN PROGRESS;
*
* <i>The BeanAction Struts extension is a work in progress.  While it demonstrates
* good patterns for application development, the framework itself is very new and
* should not be considered stable.  Your comments and suggestions are welcome.
* Please visit http://www.ibatis.com for contact information.
*
* Date: Mar 11, 2004 10:03:56 PM
*
* @author Clinton Begin
* @see BaseBean
* @see ActionContext
*/
public class BeanAction extends Action {

  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    String forward = "success";

    try {

      ActionContext.initialize(request, response);

      if (form != null) {

        // Explicit Method Mapping
        Method method = null;
        String methodName = mapping.getParameter();
        if (methodName != null && !"*".equals(methodName)) {
          try {
            method = form.getClass().getMethod(methodName, null);
            forward = (String) method.invoke(form, null);
          } catch (Exception e) {
            throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "').  Cause: " + e, e);
          }
        }

        // Path Based Method Mapping
        if (method == null && !"*".equals(methodName)) {
          methodName = mapping.getPath();
          if (methodName.length() > 1) {
            int slash = methodName.lastIndexOf("/") + 1;
            methodName = methodName.substring(slash);
            if (methodName.length() > 0) {
              try {
                method = form.getClass().getMethod(methodName, null);
                forward = (String) method.invoke(form, null);
              } catch (Exception e) {
                throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "').  Cause: " + e, e);
              }
            }
          }
        }
      }

    } catch (Exception e) {
      request.setAttribute("BeanActionException", e);
      throw e;
    }

    return mapping.findForward(forward);
  }

}
번호 제목 글쓴이 날짜 조회 수
31 스트러츠2 실습 예제 모음 (Struts Showcase) 황제낙엽 2008.11.20 56388
30 Struts2 시작하기 황제낙엽 2008.09.22 49099
29 스트러츠2 샘플 어플리케이션 (MailReader Demonstration Application) file 황제낙엽 2008.11.20 575
28 책 Starting Struts 2 - Free Online Version (InfoQ.com) file 황제낙엽 2008.07.11 490
27 MyEclipse를 사용한 Struts 빠른 시작 황제낙엽 2007.01.26 335
26 Validation과 Dispatcher액션 황제낙엽 2006.05.22 290
25 Struts GUI XML 작성 Tool 들 황제낙엽 2006.02.24 215
24 A Walking Tour of the Struts 2 MailReader Application (1) 황제낙엽 2008.12.10 205
23 샘플예제 file 황제낙엽 2009.03.02 196
22 EJB+JSP를 활용한 J2EE기반의 샘플 프로젝트 (JPetStore-5.0) 황제낙엽 2007.01.18 134
21 Struts 프로그래밍 메모 황제낙엽 2005.10.06 129
20 폼빈의 Reset 황제낙엽 2006.05.22 116
19 스트러츠2 활용 Upload 예제 file 황제낙엽 2007.08.14 115
18 Struts2(스트럿츠2) Feature(특징) 황제낙엽 2008.07.12 92
» JpetStore 에서 Action과 Form을 함께 취급하는 클래스 BeanAction (JPetStore-4.0.5) 황제낙엽 2005.11.21 91
16 Struts와 Struts2의 로그인 매커니즘 비교 황제낙엽 2008.10.23 82
15 스트러츠로 작성된 웹서점 샘플화일 (Struts+Hsql) 황제낙엽 2005.11.24 76
14 Struts 프레임워크를 이용한 효율적인 개발 전략 황제낙엽 2007.01.30 75
13 struts-config 설명 및 작성방법 황제낙엽 2006.02.27 73
12 Struts-Config.xml 과 액션과 JSP의 관계 황제낙엽 2006.05.22 65