본문 바로가기
Back-End/Spring Boot

[ Spring boot ] DTO 객체 및 폼과 뷰페이지 ③

by 2CHAE._.EUN 2022. 5. 8.
DTO 객체와 타임리프를 이용한 뷰페이지 반복 출력

 

1. 여러 개의 객체를 생성하여 뷰페이지로 넘긴 후에 타임리프 반복문을 사용하여 반복 출력하기

 

객체 자체를 선언할 때는 ${객체}를 사용해야하고 객체 안에 있는 변수를 사용하기 위해서는 *{필드명}을 사용해야한다.

 

여러 개의 객체를 생성하고 리스트를 생성해서 모든 객체를 담아줘야한다.

 

단일 객체일 경우는 th:object를 해서 객체를 하나 받으면 되지만, 리스트 같이 거대한 바구니를 받을 경우에는

객체들을 각각 꺼내서 받아야하기 때문에 th:each를 사용해야한다. 객체의 수만큼 작성해야할 필요는 없음

 

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <h1>내 지갑 정보 확인하기</h1>

    <table>
        <thead>
        <tr>
            <th>전체 거래 금액</th>
            <th>전체 금액</th>
            <th>보유 KRW</th>
        </tr>
        </thead>
        <tbody>
        <!-- 단일 객체일 경우 -->
        <tr th:object="${ BankDTO }">
            <td th:text="*{TotalTradeAmount}"></td>
            <td th:text="*{TotalMoney}"></td>
            <td th:text="*{MyKRW}"></td>
        </tr>
        <!-- 리스트 객체일 경우 -->
        <!-- blist 객체를 하나하나 꺼낼 경우 각각의 이름을 b라고 하겠다고 임의로 지정한다.-->
        <tr th:each="b : ${ bList }">
            <td th:text="${b.TotalTradeAmount}">1</td>
            <td th:text="${b.TotalMoney}">1</td>
            <td th:text="${b.MyKRW}">1</td>
        </tr>
        </tbody>
    </table>

</body>
</html>

 

package com.example.capstone.DTO;

public class BankDTO {

    private int TotalTradeAmount;
    private int TotalMoney;
    private int MyKRW;

    public BankDTO(){}

    public BankDTO(int totalTradeAmount, int toTalMoney, int myKRW) {
        TotalTradeAmount = totalTradeAmount;
        TotalMoney = toTalMoney;
        MyKRW = myKRW;
    }

    public int getTotalTradeAmount() {
        return TotalTradeAmount;
    }

    public void setTotalTradeAmount(int totalTradeAmount) {
        TotalTradeAmount = totalTradeAmount;
    }

    public int getTotalMoney() {
        return TotalMoney;
    }

    public void setTotalMoney(int totalMoney) {
        TotalMoney = totalMoney;
    }

    public int getMyKRW() {
        return MyKRW;
    }

    public void setMyKRW(int myKRW) {
        MyKRW = myKRW;
    }
}

 

package com.example.capstone.controller;

import com.example.capstone.DTO.BankDTO;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

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

@Controller
public class UserBankController {

    @GetMapping("/MyInvestment")
    public String investPage(Model model){

        // 단일 객체일 경우
        BankDTO bankDTO = new BankDTO( 10000, 99999, 888888 );

        // 여러 개의 객체를 생성
        BankDTO b1 = new BankDTO( 20300, 55555, 81111 );
        BankDTO b2 = new BankDTO( 10220, 44444, 88822 );
        BankDTO b3 = new BankDTO( 9000, 33333, 88833 );
        BankDTO b4 = new BankDTO( 87640, 22222, 884448 );
        BankDTO b5 = new BankDTO( 19000, 11111, 888648 );

        //bList라는 이름으로 BankDTO 객체들을 담는 리스트를 생성한다.
        List<BankDTO> bList = new ArrayList<>();
        bList.add(b1);
        bList.add(b2);
        bList.add(b3);
        bList.add(b4);
        bList.add(b5);

        //model
        model.addAttribute("BankDTO", bankDTO);

        // model 객체를 이용해서 blist도 뷰페이지로 전달을 해줘야한다.
        model.addAttribute("bList", bList);

        return "/Main/MyInvestment";

    }

}