가수면
JSTL 본문
JSP 내 태그 활용도를 높이기 위해 사용되는 라이브러리.
서버 사이드 로직을 구현하는 데 사용되는 특수한 태그들을 제공한다.
설치
https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/tld-summary.html
버전 지정해줘야 함
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>glassfish-jstl</artifactId>
<version>11.0.18</version>
</dependency>
Bean에 바인딩하기
아래처럼 @RequestParam를 통해 form으로 제출되는 description을 바인딩시킬 수 있다.
// todo.jsp
<form method="post">
Description: <input type="text" name="description"/>
<input type="submit" class="btn btn-success"/>
</form>
.
.
.
// TodoController.java
@RequestMapping(value="add-todo", method = RequestMethod.POST)
public String addNewTodo(@RequestParam String description, ModelMap model) {
String username = (String)model.get("name");
todoService.addTodo(username, description, LocalDate.now().plusYears(1), false);
return "redirect:list-todos";
}
그러나 이 경우 description말고 추가적인 input이 있을 경우 모든 input에 대해 @RequestParam를 작성해 바인딩해줘야 한다는 문제가 발생한다.
해결법
JSTL를 이용해 java객체(Bean)에 제출된 폼 데이터를 직접 바인딩 시키기
// todo.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form method="post" modelAttribute="todo">
Description: <form:input type="text" path="description" required="required"/>
<form:input type="hidden" path="id"/>
<form:input type="hidden" path="done"/>
<input type="submit" class="btn btn-success"/>
</form:form>
.
.
.
// TodoController.java
@RequestMapping(value="add-todo", method = RequestMethod.GET)
public String showNewTodoPage(ModelMap model) {
String username = (String)model.get("name");
Todo todo = new Todo(0, username, "", LocalDate.now().plusYears(1), false);
model.put("todo", todo); // todo.jsp의 modelAttribute와 일치시키기
return "todo";
}
@RequestMapping(value="add-todo", method = RequestMethod.POST)
public String addNewTodo(ModelMap model, Todo todo) { // todo.jsp의 modelAttribute와 일치시키기
String username = (String)model.get("name");
todoService.addTodo(username, todo.getDescription(), LocalDate.now().plusYears(1), false);
return "redirect:list-todos";
}
'Java' 카테고리의 다른 글
Spring Boot로 REST API 만들기 정리 (0) | 2023.12.19 |
---|---|
[Java] 심화 (0) | 2023.12.12 |
JSP (0) | 2023.12.02 |
어노테이션 정리 (0) | 2023.12.02 |
H2, JDBC, JPA, Hibernate (2) | 2023.12.02 |
Comments