날짜 포맷팅 ㅋㅋ 과제하다가 여러 번 킹받음 ㅠㅠ 검색 값 유지하는 건 알아서 되는 건 줄 알았는데.. ㅎ 뭐 하나 그냥 되는 게 없구만 ㅎㅎㅎ
파라미터의 인자는 사용자가 전달하는 값이므로 ${파라미터명}으로 가져올 수 없음
${param.파라미터명}
파라미터 type의 인자에 따라 선택되는 옵션을 다르게 설정하기 위해 옵션 수 만큼 조건문을 사용해야 함
<c:choose>
: if-else문(그룹 조건문)을 사용하는 효과를 낼 수 있음<c:if>
: 단일 조건 구현에 사용<c:when>
: if 역할, 조건 명시<c:otherwise>
: else 역할==
)으로 비교 가능<option> 태그의 selected
속성 사용 시, 옵션을 선택된 상태로 유지할 수 있음
클라이언트에서는 검색어가 유지되는 것처럼 보이지만, 사실은이미 날라간 데이터를 개발자가 다시 입력해주는 방식을 사용하는 것
value=${param.keyword}
<form action="list" method="GET">
<c:choose>
<c:when test="${param.type == 'member_nick'}">
<select name="type" required>
<option value="member_id">ID</option>
<option value="member_nick" selected>닉네임</option>
</select>
</c:when>
<c:otherwise>
<select name="type" required>
<option value="member_id">ID</option>
<option value="member_nick">닉네임</option>
</select>
</c:otherwise>
</c:choose>
<input type="search" name="keyword" required placeholder="검색어 입력"
value="${param.keyword}">
<button>검색</button>
</form>
<!-- list.jsp -->
<div align="center">
<h1>포켓몬 목록</h1>
<button><a href="insert">포켓몬 등록</a></button> <br><br>
<table border="1" width="400">
<thead>
<tr>
<th>번호</th>
<th>이름</th>
<th>속성</th>
</tr>
</thead>
<tbody align="center">
<c:forEach var="dto" items="${list}">
<tr>
<td>${dto.no}</td>
<td>
<a href="detail?no=${dto.no}">${dto.name}</a>
</td>
<td>${dto.type}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
//Controller
@GetMapping("/detail")
public String detail(Model model,
@RequestParam int no) {
//PocektMonsterDto dto = pocketMonsterDao.selectOne(no);
//model.addAttribute("dto", dto);
model.addAttribute("dto", pocketMonsterDao.selectOne(no));
return "pocketmon/detail";
}
<!-- detail.jsp -->
<div align="left">
<h1 align="center">포켓몬 상세 정보</h1>
<ul>
<li>번호 : ${dto.no} </li>
<li>이름 : ${dto.name} </li>
<li>속성 : ${dto.type} </li>
</ul>
<h2><a href="list">목록으로 돌아가기</a></h2>
</div>
날짜/숫자/시간을 포맷팅할 떄 사용하며, 국제화/다국어 기능을 지원함
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
```html
<fmt:parseDate value="${dto.releaseTime}" var="releaseDate" pattern="yyyy-MM-dd HH:mm:ss"/>
<fmt:formatDate value="${releaseDate}" var="releaseToDate" pattern="yyyy-MM-dd"/>
<!--
Date 타입으로 가져왔다면 맨 아래 줄로만 포맷팅하면 됨
y년 M월 d일 E요일 등 원하는 패턴 지정 가능
-->
```
<fmt:formatNumber value="${memberDto.memberPoint}" pattern="#,##0"/> point
사용자가 변경하면 안 되는 항목들이 있음. <input> 태그에 아래와 같은 속성 중 해당 항목들을 처리할 방법을 선택(크롬 개발자 도구 > network 탭 > payload에서 전달되는 데이터 정보 확인 가능)
//Controller
@GetMapping("/edit")
public String edit(Model model,
@RequestParam int no) {
PocketMonsterDto dto = pocketMonsterDao.selectOne(no); //저장 내용 조회
model.addAttribute("dto", dto);
return "pocketmon/edit";
}
@PostMapping("/edit")
public String edit(@ModelAttribute PocketMonsterDto dto,
RedirectAttributes attr) {
if(pocketMonsterDao.update(dto)) {//성공했다면
//return "redirect:detail?no=" + dto.getNo(); //${}는 jsp에서만 사용
attr.addAttribute("no", dto.getNo()) //권장(spring 도구 활용)
return "redirect:detail";
}else {
return "redirect:edit_fail";
}
}
@GetMapping("/edit_fail")
public String editFail() {
return "pocketmon/editFail";
}
<!-- edit.jsp -->
<div align="center">
<h1>포켓몬 정보 수정</h1>
<form action="edit" method="POST">
<input name="no" value="${dto.no}" type="hidden"><br><br>
<input name="name" value="${dto.name}" placeholder="이름"><br><br>
<input name="type" value="${dto.type}" placeholder="타입"><br><br>
<button>저장</button>
</form>
</div>
(Day33 내용이나 이 게시물에서 CRUD를 마무리하고자 추가함)
넘모 멋져요 ~ ^//^
저랑 이웃 맺어요 ~
비동기 하다 죽겠네요 ~...