가수면

JSTL 본문

Java

JSTL

니비앙 2023. 12. 12. 09:59

JSP 내 태그 활용도를 높이기 위해 사용되는 라이브러리.

서버 사이드 로직을 구현하는 데 사용되는 특수한 태그들을 제공한다.

설치

https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/tld-summary.html

 

JSTL core (TLDDoc Generated Documentation)

import Retrieves an absolute or relative URL and exposes its contents to either the page, a String in 'var', or a Reader in 'varReader'.

docs.oracle.com

버전 지정해줘야 함

		<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