일반 프로퍼티 또는 List 타입의 프로퍼티를 출력하는 방법은 이미 살펴 보았다.
프로퍼티가 아닌 객체 자체를 출력하는 경우는 다음과 같이 할 수 있다.

struts.xml

<action name="printObject" class="example.chapter2.PrintObjectAction">
    <result>/chapter2/printObject.jsp</result>
</action>

example.model.Product.java

package example.model;

public class Product {
    private String name;
    private String modelNo;
   
    public Product() {}
    public Product(String name, String modelNo) {
        this.name = name;
        this.modelNo = modelNo;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }
   
    public String getModelNo() {
        return modelNo;
    }
   
    public void setModelNo(String modelNo) {
        this.modelNo = modelNo;
    }
}

example.chapter2.PrintObjectAction.java

package example.chapter2;

import example.model.Product;

public class PrintObjectAction {
    private Product product;
   
    public String execute() throws Exception {
        product = new Product("MP3 플레이어", "MP3-070701");
        return "success";
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }
}

/chapter2/printObject.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<s:label>제품 이름 : </s:label>
<s:property value="product.name"/>
<br>
<s:label>제품 모델번호 : </s:label>
<s:property value="product.modelNo"/>

</body>
</html>

Product라는 모델에 빈 프로퍼티를 만들고, PrintObjectAction.java 파일의 execute 메소드에서 해당 프로퍼티에 값을 셋팅한다.
셋팅 된 값을 printObject.jsp에서 <s:property> 태그에서 product.name, product.modelNo로 불러와 사용한다.
해당 값은 OGNL 형식으로 getter, setter 형식의 빈 메소드를 사용하여 값을 불러 온다.
label 태그는 html 형식의 label 태그를 생성해 주는 역할을 한다.

객체를 List형태로 보여주는 경우라면 아래와 같이 사용할 수 있다.

<action name="printObjectList" class="example.chapter2.PrintObjectListAction">
   <result>/chapter2/printObjectList.jsp</result>
</action>

example.chapter2.PrintObjectListAction.java

package example.chapter2;

import java.util.ArrayList;
import java.util.List;

import example.model.Product;

public class PrintObjectListAction {
    private List<Product> listProduct;
   
    public String execute() throws Exception {
        listProduct = new ArrayList<Product>();
        listProduct.add(new Product("MP3 플레이어", "MP3-070701"));
        listProduct.add(new Product("노트북 PC", "NB-070613"));
        listProduct.add(new Product("PDA", "PDA-070507"));
        listProduct.add(new Product("휴대폰", "MOB-070615"));
       
        return "success";
    }

    public List<Product> getListProduct() {
        return listProduct;
    }

    public void setListProduct(List<Product> listProduct) {
        this.listProduct = listProduct;
    }
   
}

/chapter2/printObjectList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>제품목록 : </p>
<table border="1" width="400">
<tr align="center" style="color:white;background-color:black;">
    <td>제품이름</td>
    <td>제품 모델번호</td>
</tr>

<s:iterator value="listProduct" status="status">
<tr bgcolor="<s:if test="#status.odd">lightgrey</s:if>">
    <td><s:property value="name"/></td>
    <td><s:property value="modelNo"/></td>
</tr>
</s:iterator>


</table>
</body>
</html>

action 파일의 execute 메소드에서 List 타입의 listProduct 프로퍼티에 값을 설정한다.
설정된 값을 printObjectList.jsp에서 불러와서 사용한다.
앞에서 product.name, product.modelNo 와 같이 사용했지만, iterator 안에서는 name, modelNo 와 같은 식으로 사용한다.
status는 Iteration 상태 값을 가리키는 값이다.
if 태그를 통해서 해당 값이 홀수인지 체크(#status.odd)한다.
status에서 지원하는 다른 속성은 다음과 같다.

first : 처음 행
last : 마지막 행
index : 행의 인덱스

추가로 날짜 출력과 관련된 예제 하나를 더 살펴보면 아래와 같다.

struts.xml

<action name="printDate" class="example.chapter2.PrintDateAction">
   <result>/chapter2/printDate.jsp</result>
</action>

PrintDateAction.java

package example.chapter2;

import java.util.Date;

public class PrintDateAction {
    private Date currDate;
   
    public String execute() {
        currDate = new Date();
       
        return "success";
    }

    public Date getCurrDate() {
        return currDate;
    }

    public void setCurrDate(Date currDate) {
        this.currDate = currDate;
    }
}

printDate.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
    <li><s:property value="currDate"/></li>
    <li><s:date name="currDate"/></li>
    <li><s:date name="currDate" format="yyyy-MM-dd HH:mm:ss"/></li>
</ul>
</body>
</html>

sdate 태그에서 format 을 설정하지 않으면 "2009. 5. 11 오후 3:06:36"와 같이 출력되며, format을 주게 되면 format 형식으로 출력된다.





신고

'Java > Struts2' 카테고리의 다른 글

스트럿츠를 사용하여 객체 출력하기  (0) 2009.05.11
스트럿츠를 사용하여 List 출력하기  (1) 2009.05.06
스트럿츠2 설정하기  (2) 2009.04.28

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
자바스크립트에서 폼의 객체 이름을 "objName[]" 식으로 지을 경우가 있다.
보통 php쪽에서 배열로 받기 위해서 위와 같이 짓는데...
이를 자바스크립트에서는 배열로 인식하지 못해 조금 난처한 경우가 많다.

가령 다음과 같은 경우 오류가 난다

<HTML>
<HEAD>
</head>

<script language="JavaScript">
<!--
function objLength() {
   alert(document.testForm.checkObj[].length);
}
//-->
</script>

<form name="testForm">
<input type="checkbox" name="checkObj[]"> aaa
<input type="checkbox" name="checkObj[]"> bbb
<input type="checkbox" name="checkObj[]"> ccc

<a href="javascript:objLength();">체크박스의 개수는?</a>
</form>

이럴 경우에는 다음과 같이 처리해 주면 된다.



<script language="JavaScript">
<!--
function objLength2() {
   alert(document.forms['testForm2']['checkObj[]'].length);
}
//-->
</script>

<form name="testForm2">
<input type="checkbox" name="checkObj[]"> aaa
<input type="checkbox" name="checkObj[]"> bbb
<input type="checkbox" name="checkObj[]"> ccc

<a href="javascript:objLength2();">체크박스의 개수는?</a>
</form>

또한 각 개체로의 접근은 다음과 같이 사용하면 된다...

ex) document.forms['testForm2']['checkObj[]'][0].value


이 문제로 조금 머리 아파 하던 차에... 해결방법을 알게 되어서 올립니다. ^^
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
객체를 만들어 사용하다가 객체의 개수를 object.length로 못 알아 온다는 것을 알고... -.-;;
이 역시 고니님께 물어봤다...
팁 겸... 자료 백업 겸... 올려본다 ㅋ

신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret