2014년 12월 9일 화요일

Struts ActionForm에 관하여...[자바,스프링프레임워크3/4,스프링4/3교육학원,Spring Framewok4/3,Spring교육]

ActionForm 객체는 클라이언트에서 입력한 데이터를 비즈니스 계층으로 전달하는 역할을 하는데 이전 웹페이지의 View 영역에서 전달된 파라미터와 현재 요청을 처리할 때 뷰 영역에 전달할 파라미터를 저장하는 역할을 하므로 ActionForm이 VIEW 영역에 속한다고 볼수도 있겠지만 실제 Action과 깊이 관련이 있으므로 Action과 함께 Controller 영역의 Component로 보는 것이 좋을 듯 하다. 

  

Struts Framework에서는 사용자의 입력 화면에서 입력한 데이터를 자동으로 모아 ActionForm 인스턴스의 setter를 이용해 설정하며 이를 통해 비즈니스 계층으로 데이터를 전달 할 수 있다. 

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

ActionForm을 만들기 위해서는 “org.apache.struts.action.ActionForm”을 상속받아야 한다. 

  

public class LoginForm extends ActionForm { 

  

  

[ActionForm을 생성할 때 주의할 사항] 

  

- ActionForm에는 getter/setter 이외의 별도의 비즈니스로직을 담은 메소드를 정의하지 않는다. 

- ActionForm에 선언된 모든 필드(변수)에 getter/setter를 만들어야 하며 getter/setter의 이름은 자바빈즈 명명규칙을 준수해야 한다. 예를들어 Struts RequestProcessor는 “myName”이라는 요청 파라미터를 ActionForm의 myName 필드에 값을 저장하기 위해 setMyName() 메소드를 호출할 것이고, Struts Custom Tag에서 myName 필드 값에 접근하기 위해 getMyName() 메소드를 이용할 것이다. 

- 프리젠테이션 로직의 사용자 폼과 ActionForm과는 1:!일 필요는 없다. ActionForm은 여러 페이지에 재활용이 가능하다. 

- ActionForm은 사용자의 요청(Request)과 Action 사이에서 방화벽 역할을 수행하는데 사용자의 요청이 올바른지, 필요한 파라미터를 다 넘겼는지, 값은 제대로 들어 있는지등의 검증을 validate() 메소드를 통해 한다. 

- 사용자의 요청 파라미터를 담을 ActionForm의 필드 중 잘못 입력될 확률이 많은 필드는 가능한 String으로 선언하는 것이 좋다. 어떤 데이터 TYPE도 HTTP로 전달될 때는 문자열로 전달되며 ActionForm에서 validate() 메소드로 검증 후 이전 페이지로 다시 돌아가 입력 필드에 사용자가 잘못 입력한 필드 값을 표시하고 사용자의 오류를 알 수 있게 해 줘야 한다. 

- ActionForm을 Model 영역까지 전달하지 말아야 한다. ActionForm은 비즈니스 로직에 전달되어야 할 값을 모드 담고 있으므로 비즈니스 로직(Model 영역)으로 넘겨준다고 생각할 수 있지만 이럴 경우 이럴 경우 프리젠테이션 영역과 비즈니스로직의 분리라는 즁요 원칙에 위배된다. 즉 ActionForm을 비즈니스 계층으로 직접 전달 하기 보다는 적절한 DTO(Data Transfer Object)를 생성하는 것이 훨씬 효율적 이다. 

  

  

스트럿츠에서는 다음과 같이 ActionForm 을 처리한다. 

  

1.    Action의 매핑 정보를 확인 하고 Action이 설정 되어 있는지 확인. Action 매핑의 name 속성에 해당 하는 <form-bean > 매핑이 있는지 확인. 

  

<!-- ========== Form Bean Definitions ================================ --> 

    <form-beans> 

        <form-bean name="loginForm" type="login2.LoginForm">              

            <form-property name="pwd" type="java.lang.String" /> 

            <form-property name="id" type="java.lang.String" />            

        </form-bean>            

    </form-beans> 

  

  

  

<!-- ========== Action Mapping Definitions ============================ --> 

    <!--valiedate를 true라고 함으로써 LoginForm의 validate가 호출됩니다.      --> 

    <action-mappings> 

          <!-- loginAction에 대한 정의 --> 

        <action          

        path="/LoginSubmit" 

        type="login2.LoginAction" 

            name="loginForm"                        

            validate="true" 

            input="/login.jsp" 

        /> 

        

        <!-- logoffAction에 대한 정의 --> 

        <action          

        path="/logoff" 

        type="login2.LogoffAction" 

            name="logoffForm"                        

            validate="false"          

        />                      

    </action-mappings> 

  

  

2.    메모리에 ActionForm 인스턴스가 있는지 확인하여 이미 만들어진 타입이 같고 scope가 적당 한 것이 있으면 재사용하고 없으면 새로 인스턴스를 생성. 새 인스턴스를 만드는 경우엔 scope 속성이 있다면 속성에 따른 scope에 저장한다. 

  

3.    ActionForm의 reset 메소드를 호출. 

  

      

            public void reset(ActionMapping mapping, HttpServletRequest request) { 

                          pwd = ""; 

                          id = ""; 

            } 

  

4.    ActionForm의 setter를 통해 요청 파라미터 값을 ActionForm에 입력. 

  

public void setId(String id) { 

                          this.id = id; 

            } 

            

            public void setPwd(String pwd) { 

                          this.pwd = pwd; 

            } 

  

5.    validate속성이 “true”로 설정 되어 있으면 validate() 메소드를 실행 하고 에러가 있다면 에러를 반환. 

  

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 

                          ActionErrors errors = new ActionErrors(); 

                          

                          if((id == null) || (id.length()<1)) { 

                                        errors.add("error.id.required", new ActionError("error.id.required")); 

                          } 

                          

                          if((pwd == null) || (pwd.length()<1)) { 

                                        errors.add("error.pwd.required", new ActionError("error.pwd.required")); 

                          } 

                          

                          return errors;                                

            } 

  

ActionForm의 중요한 메소드는 reset(), validate() 메소드 인데 하나씩 보도록 하자 

  

reset() 메소드의 원형은 다음과 같다. 

  

public void reset(ActionMapping mapping, HttpServletRequest request); 

  

스트럿츠의 ActionForm 클래스의 위 두 메소드는 기본적으로 아무 기능도 수행 하지 않으므로 ActionForm을 상속한 하위 클래스에서 필요하다면 재정의(Override) 해서 적절히 사용해야 한다. 

  

Controller는 요청 파라미터에 있는 ActionForm의 인스턴스에 입력 하기전에 reset() 메소드를 수행 하는데 reset이라는 것은 초기화의 의미이며 폼빈의 인스턴스를 공유하는 경우엔 중요한 부분이다. 

  

Controller는 요청값들이 ActionForm의 setter에 의해 설정 되면 validate가 “true”로 설정 된 경우에는 valiedate() 메소드를 호출 하는데 이 메소드에서는 사용자의 입력 값에 대한 validation check를 수행하여 오류가 있다면 ActionErrors, ActionMessages 객체에 담아서 리턴 합니다. 

  

ActionForm에서의 validate()는 비즈니스 로직 이라기 보다는 입력 값의 단순한 검사 정도로 보시면 되며 실제 들어온 값에 대한 논리적인 타탕성등 여러가지 검사를 하기 위해서는 별도의 비즈니스 로직을 만들어 처리해야 한다. 

  

validate() 메소드의 원형은 다음과 같습니다. 

  

public ActionErrors validate(ActionMapping mapping, HttpServletRequest request); 





 [100%환급,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷넷C… 오라클자바…12-272788
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-112023
53 [평일100%환급7건]웹퍼블리싱,자바&JSP,안드로이드,C#닷넷,SQL기… 오라클자바…03-151830
52 [주말]C#,ASP.NET마스터 오라클자바…01-312000
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312945
50 [주말주간]자바&웹,jQUERY,스프링프레임워크,마이바티스 오라클자바…01-311537
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… 오라클자바…01-191859
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111734
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032300
46 [100%환급,실무전문]빅데이터/SQL/자바/스프링/안드로이드/닷넷C… 오라클자바…12-272788
45 [평일주간]NoSQL,MongoDB,빅데이터기초과정 오라클자바…12-191950
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141930
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-112023
42 [평일주간]빅데이터하둡기초과정(BigData Hadoop) 오라클자바…12-091575
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011800
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-012016
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011451

댓글 없음:

댓글 쓰기