visit count 3202459
RSS2.0
Artszen.org
+more Notice...
2010-01-15
JBoss User Group 오프라인 무료 교육
2009-05-26
소프트웨어진흥원 주관 POJO 기반의 OpenSource 웹 개발 프레임워크 실무 Workshop 과정 1차가 5월23일 시작되었습니다.
2009-05-13
세미나 개발 작업 진행
2009-05-13
컬럼 개발 작업 진행
2009-05-13
태그스토리 개발작업 진행
교육 안내
- 소프트웨어진흥원 2009년 맞춤형 S/W 인력양성 사업

Link Sites...
Apache Foundation
Struts
iBatis
Forrest
AppFuse
Prototype
Eclipse
TheServerSide
jBoss
jBoss jBPM
Artszen Software
인기 태그
스트럿츠2
struts2
servlet
서블릿
스트럿츠2 태그
struts2 tag
control tag
일반 태그
컨트롤 태그
generic tag
tag
FilterDispatcher
jsp
Action
struts2.0.9
액션
필터 디스패처
lifecycle
result
리절트
 
Struts2
컬렉션형 데이터의 타입 변환 예제 (입력,조회 화면 포함: 객체값을 여러개 동시 입력 후 리스트에 자동저장) hit 3424  

객체의 각 프로퍼티 값을 입력한 것을 동시에 여러 개를 입력할 수 있게 하고, 이를 액션의 리스트 프로퍼티에 객체로 한번에 저장하는 예입니다.


{{예제: 서적 데이터 입력}}


이 예제는 3개의 서적 정보를 동시에 입력 받아서 액션 클래스의 리스트에 서적 객체 데이터를 자동으로 저장하는 예제입니다.
이 예제를 구성하기 위해서 사용할 액션은 2개입니다.
    - 입력 폼을 출력할 add.action
    - 입력한 리스트를 출력할 view.action



이 예제를 실행한 모습은 다음과 같다.

[add.action 실행 화면]




[데이터 입력 후 화면]




[Submit 버튼을 눌러서 view.action을 호출했을 때의 화면]





서적 데이터는 isbn, title, writer 3개의 프로퍼티와 리스트에 담을 때 사용할 키 프로퍼티인 id 로 총 4개의 프로퍼티로 구성합니다.

[src/example/test/Book.java]


package example.test;

 

import java.io.Serializable;

 

public class Book implements Serializable {

       private int id;

       private String isbn;

       private String title;

       private String writer;

      

       public Book() {}

       public Book(int id) {

             this.id = id;

       }

       public Book(int id, String isbn, String title, String writer) {

             this.id = id;

             this.isbn = isbn;

             this.title = title;

             this.writer = writer;

       }

       public int getId() { return id; }

       public void setId(int id) {this.id = id; }

       public String getTitle() { return title; }

       public void setTitle(String title) { this.title = title; }

       public String getWriter() { return writer; }

       public void setWriter(String writer) { this.writer = writer; }

       public String getIsbn() { return isbn; }

       public void setIsbn(String isbn) { this.isbn = isbn; }      

}


다음은 액션클래스를 구성합니다.

[src/example/test/BookAction.java]


package example.test;

 

import java.util.ArrayList;

import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

 

public class BookAction extends ActionSupport {

       private List listBook = new ArrayList();

      

       public String add() throws Exception {

             for (int i=0; i<3; i++) {

                    //id 값으로 i값을 사용하고 실제 모델 데이터에서는 사용하지 않을

                     // 있고, id 값으로 i 대신 모델 데이터에서 사용할 고유값                       // 얻어서 넣을 있다. 또는 일단 i값을 사용한 후에 고유값으로                      //치환할 있을 것이다.

                    Book b = new Book(i);

                    listBook.add(b);

             }

             return SUCCESS;

       }

 

       public String view() throws Exception {

             return SUCCESS;

       }

 

       public List getListBook() {return listBook;}

       public void setListBook(List listBook) {this.listBook = listBook;}

}


BookAction 클래스는 java.util.List 타입의 프로퍼티 listBook 을 갖는다.
add() 액션 메소드에서 for() 문을 이용하여 3번 반복하며, 임의의 일련번호를 갖는 Book 타입의 객체를 생성하여 listBook에 저장하고 있다.
이는 입력폼에서 3개의 서적 정보 입력 컨트롤을 생성하기 위한 것인데 JSP에서

<s:iterator value="listBook" ... >
    <s:textfield .../>
    <s:textfield .../>
    <s:textfield .../>
</s:iterator>

과 같은 형식으로 여러개의 입력 데이터를 자동으로 생성하기 위한 것이다.

액션 클래스를 구성했으면 타입 변환을 위한 정의 파일을 작성해야 한다.
타입 변환 정의 파일은 액션 클래스와 같은 패키지에 "액션 클래스명-conversion.xml" 이름으로 생성하면된다.
이 예제에서는 BookAction-conversion.xml 이 될 것이며, 이 파일은 입력 폼에서 입력한 여러개의 데이터를 각각의 객체로 구성하여 BookAction 클래스의 프로퍼티인 listBook 에 저장하기 위한 것이다.

[src/example/test/BookAction-conversion.xml]


KeyProperty_listBook=id

Element_listBook=example.test.Book

CreateIfNull_listBook=true


KeyProperty_listBook=id 부분은 액션 클래스의 프로퍼티인 listBook에서 키 값으로 사용할 프로퍼티를 정의하는 이름이다.
(KeyProperty_리스트 프로퍼티 명) 과 같은 형식으로 기입한다.
따라서 이 값은 listBook 리스트에 저장될 객체의 키 프로퍼티 이름이 된다.

Element_listBook 부분은 액션 클래스의 리스트 프로퍼티에 저장될 클래스를 정의하는 곳이다.
(Element_리스트 프로퍼티 명)   형식으로 적으며, 우측 값에는 클래스 전체 경로 또는 같은 패키지에 있다면 클래스명만 적을 수 있다.

CreateIfNull_listBook 부분 역시 같은 규칙으로 이름이 정해지고, listBook 이 널 값인 경우 생성할 것인지의 여부를 결정하는 곳이다.

다음 입력 폼으로 사용할 add.jsp를 작성한다.

[/test/add.jsp]


<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Struts2</title>

</head>

<body>

 

<s:form  action="view" method="POST" theme="simple">

 

Struts2 Type Conversion Example...

<br/>

 

<ul>

<s:iterator value="listBook" id="book">

<li>

       ISBN: <s:textfield name="listBook(%{#book.id}).isbn"/>

       title: <s:textfield name="listBook(%{#book.id}).title"/>

       writer: <s:textfield name="listBook(%{#book.id}).writer"/>

</li>

</s:iterator>

</ul>

<br/>

<s:submit/>

 

</s:form>

 

</body>

</html>


입력 페이지인 add.jsp 에서 서적의 3가지 데이터인 isbn, title, write 를 각각 입력 받을 텍스트 필드 컨트롤을 자동 생성하기 위해서
<s:iterator> 와 <s:textfield> 태그를 사용한다.
이 때 주의해서 사용할 부분은 <s:iterator ... id="book"> 에서 id 속성에 정의된 book 이다. 이 값은 list에 저장될 객체를 구분하기 위한 용도로 사용된다.
또한 <s:textfield > 태그의 name 속성 값에는 name="listBook(%{#book.id}).isbn" 과 같이 listBook 리스트에 저장될 객체의 각 속성을 정의할 수 있다.

add.jsp의 <s:submit/> 버튼을 클릭했을 때 view.action을 호출하도록 <s:form > 태그의 action 속성에 action="view"라고 정의되어있다.

view.action을 호출하면 실행될 view.jsp의 내용은 다음과 같다. <s:iterator > 태그를 이용하여 액션의 리스트형 프로퍼티인 listBook에 저장되어있는 객체의 값을 출력하는 내용으로 구성된다.


[/test/view.jsp]


<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<title>Struts2</title>

</head>

<body>

<ul>

<s:iterator value="listBook">

<li>

       <s:property value="isbn"/> : <s:property value="title"/> ...(<s:property value="writer"/>) <br/>

</li>

</s:iterator>

 

</ul>

</body>

</html>


끝으로 struts.xml 파일에 add.action과 view.action을 정의한다.


[src/struts.xml]


<?xml version="1.0" encoding="UTF-8" ?>

 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

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

             <action name="add"

                    class="example.test.BookAction" method="add">

                    <result>/test/add.jsp</result>

             </action>

 

              <action name="view"

                    class="example.test.BookAction" method="view">

                    <result>/test/view.jsp</result>

             </action>

       </package>

</struts>



2008-04-22 07:23:05   현철주  

  Tag
컬렉션 타입변환
Collection Type Conversion
Struts2
스트럿츠2
이명환 2008-05-19 03:21:28
 BookAction-conversion.xml  이 아니라 BookAction-conversion.properties 입니다 ^^ 참고하십시오.