2013년 8월 12일 월요일

[오라클자바COMMUNITUY, STRUTS SPRING강좌]struts2 staticParams

struts2 인터셉터(initerceptor) – staticParams


 오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용추료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)  

 

staticParams Interceptor는 struts.xml의 액션설정에서 params 요소로 입력한 값들을 ValueStack의 객체에 세팅 하는데 상단에 Action이 있으므로 Action의 Property를 세팅하게 되는 것이다. 이는 HTTP 요청 파라미터와 같은 효과를 나타내는데 staticParams 인터셉터를 params 인터셉터 앞에 붙이면 staticParams 인터셉터에서 설정한 파라미터를 같은 이름이라면 params 인터셉터에서 다시 세팅하게 된다. 즉 staticParams 인터셉터에서 세팅하는 값은 default value의 성격을 갖게 된다.

 

다음과 같은 struts.xml 파일이 있다고 할 때…

(10번 강좌 “Action총수행시간을 인터셉트로 구현”에 있는 struts.xml)

 

더해지는 두수를 입력하지 않은 경우를 대비해 staticParam으로 두수를 “0”으로 초기화를 시키면

 

<action name="add" class="interceptor1.action.SumAction">

  <param name=”num1”>0</param>

<param name=”num2”>0</param>

        <interceptor-ref name="mytimer"/>

        <interceptor-ref name="prepare"/>

        <interceptor-ref name="modelDriven"/>

<interceptor-ref name="staticParams"/>

        <interceptor-ref name="params"/>

        <result>/result.jsp</result>

      </action>

 

이 경우 form을 서브밋 하지 않아도 NumberForAdd 객체의 두수가 static 파라미터로 초기화 된다.

 

staticParams 인터셉터의 다른 기능은 Parameterizable 인터페이스를 구현한 Action에 parameter Map을 세팅한다. Parameterizable 인터페이스에는 3개의 메소드가 있는데 staticParams 인터셉터는 setParams() 메소드를 통해 Parameter Map을 세팅 한다.

 

만약 struts.xml이 다음과 같이 되어 있고…

 

<package name="struts2" extends="struts-default">         

   

      <action name="add" class="staticParams.action.SumAction">

              <param name="num1">9</param>

            <param name="num2">9</param>       

            <interceptor-ref name="staticParams"/>

        <result>/staticParams/result.jsp</result>

      </action>

     

    </package>

 

Action이 다음과 같이 되어 있다면…

 

package staticParams.action;

 

 

import java.util.Map;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

 

import staticParams.dao.SumDAO;

import staticParams.model.NumberForAdd;

 

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ModelDriven;

import com.opensymphony.xwork2.Preparable;

import com.opensymphony.xwork2.config.entities.Parameterizable;

 

public class SumAction implements Action, Parameterizable {

    //도메인 오브젝트

          NumberForAdd num;

          private int sum = 0;

         

          //Parameter Map

          Map<String, Object> params;

         

          //Parameterizable의 setParams 메소드 구현

          public void setParams(Map<String, Object> params) {

                    //paramsMap에 struts.xml의 params에 저장된 값들이

//Key, Value 형태로 저장됨

                    this.params = params;

          }

         

          //Parameterizable의 addParam 메소드 구현

          public void addParam(String name, Object value) {    }

         

          //Parameterizable의 getParams 메소드 구현

          public Map<String, Object> getParams() {

                    return params;

          }

         

          public String execute() throws Exception {

                   

                    num = new NumberForAdd();

                   

                    num.setNum1(params.get("num1").toString());

                    num.setNum2(params.get("num2").toString());

                   

                    SumDAO dao = new SumDAO();             

                    sum = dao.add(num);

                   

                    return SUCCESS;

          }

                   

          public int getSum() {

                    return sum;

          }

}

 

참고로 NumberForAdd.java는 다음과 같다.

 

package staticParams.model;

 

public class NumberForAdd {

          private String num1;

          private String num2;

         

          public String getNum1() {

                    return num1;

          }

          public void setNum1(String num1) {

                    this.num1 = num1;

          }

          public String getNum2() {

                    return num2;

          }

          public void setNum2(String num2) {

                    this.num2 = num2;

          }

         

}

 

 

[SumDAO.java]

 

package staticParams.dao;

 

import staticParams.model.NumberForAdd;

 

public class SumDAO {

          public int add(NumberForAdd num) {

                    return Integer.parseInt(num.getNum1()) + Integer.parseInt(num.getNum2());

          }

}

 

 

 

[결과화면]

 

두수를 입력하지 않은 경우

 

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

 

 

Parameter map에 기본값이 9로 세팅 되었다.

댓글 없음:

댓글 쓰기