Thymeleaf 문법 적용시 기본 텍스트 값이 있는 경우와 없는 경우의 차이
1. th:text 태그 안의 값을 셋팅할 때 태그 안에 값을 넣어두는 이유
package com.example.capstone.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/userInfo/userdata")
public String checkuserInfo(Model model){
model.addAttribute("username", "이꼬마");
//model에 key와 value를 추가하고 뷰페이지 단으로 같이 데이터가 전달된다.
// 해당 데이터가 /userInfo/userdata로 넘어가서 같이 출력이 된다.
return "/userInfo/userdata";
}
}
<h1 th:text="${username}"></h1>
<h1 th:text="${username}">ㅁㅁㅁ</h1>
ㅁㅁㅁ로 된 부분은 템플릿 엔진 실행시 실제로 출력되지 않고 전달된 username의 출력값으로 치환 및 대체된다.
하지만 전달된 데이터가 없다면 default 값인 ㅁㅁㅁ가 출력된다.
태그 안에 값을 넣어두는 이유 : ㅁㅁㅁ은 default 값이다.
2. 요청 시 파라미터 값을 넘겨서 데이터를 전달해서 받는 방법
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${username} + '님 회원 정보입니다.'"></h1>
<h1>회원 정보</h1>
</body>
</html>
th:text 태그 안의 값을 셋팅해서 요청 시 파라미터 값을 넘겨서 데이터를 전달한다.
Spring boot를 사용해서 파라미터 값을 전달받는 방법
1. 사용자가 파라미터를 직접 입력해서 데이터를 전달하는 방법
package com.example.capstone.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@GetMapping("/start/login")
public String userLogin(){
return "/start/login";
}
@GetMapping("userInfo/userdata")
public String userId( @RequestParam("userid") String uid, Model model ){
model.addAttribute("userid", uid);
return "/userInfo/userdata";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${username} + '님 회원 정보입니다.'"></h1>
<h1 th:text="${userid} + '님 로그인 성공!'"></h1>
<h1>회원 정보</h1>
</body>
</html>
파라미터 값을 전달받기 위해서는 @RequestParam("넘어오는 값") String 변수이름 을 사용한다.
@RequestParam("userid") String uid는 model에 담아서 전달이 된다.
하나의 파라미터만 넘기는 경우에는 model을 사용하지 않고 하나만 지정해주면 된다.
uid는 입력받은 데이터를 의미하고 그 uid를 model에 담아서 전달하면 된다. 그리고 model key를 userid로 설정한다.
* GetMapping을 사용할 때 Mapping은 하나에 html 파일에는 한번만 적용할 수 있다. 여러번 지정해서 함수를
생성하면 스프링 작동 오류남
단일 파라미터 값을 전달 받는 RequestParam
RequestParam을 사용했을 때 파라미터를 전달해서 요청하지 않는다면 에러가 난다. 설령 파라미터를 전달하지
않을 경우 에러를 뜨지 않게 요청할 수 있는 방법이 존재한다.
required = true 옵션을 이용해서 기본적으로 true로 설정해놓으면 mapping된 주소 뒤에 반드시 파라미터를
전달해줘야한다. 전달하지 않는다면 에러가 난다. 반대로 false로 설정해놓으면 옵션이 필수적이 아니여서 파라미터를
무조건 전달할 필요가 없고 mapping된 주소로만 접속해도 에러가 나지 않는다.
( required = true를 명시해주지 않는 경우가 default이다. )
package com.example.capstone.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@GetMapping("/start/login")
public String userLogin(){
return "/start/login";
}
@GetMapping("userInfo/userdata")
public String userId( @RequestParam(value = "userid", required = false) String uid, Model model ){
model.addAttribute("userid", uid);
return "/userInfo/userdata";
}
}
required = true 옵션은 디폴트가 true이고 써놓지 않는다면 디폴트 값으로 true가 적용된다.
이 경우에는 반드시 주소창에 userid 파라미터 값을 넣어서 HTTP 요청을 넣어야 한다. 안그러면 페이지 에러가 발생.
→ http://localhost:8024/userInfo/userdata?userid=2chaechae
반대로, false로 지정을 하면 파라미터 값을 넣지 않고 요청을 해도 페이지 에러가 발생하지 않는다.
true가 기본 값이고 보통은 @RequestParam("userid") 이다.
@RequestParam이 가져오는 value와 전달하는 String 변수의 이름은 굳이 안같아도 된다. value 옵션은 생략 가능.
여러 개의 파라미터 값을 전달받는 RequestParam
package com.example.capstone.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@GetMapping("/start/login")
public String userLogin(){
return "/start/login";
}
// @GetMapping("userInfo/userdata")
// public String userId( @RequestParam(value = "userid", required = false) String uid, Model model ){
//
// model.addAttribute("userid", uid);
//
// return "/userInfo/userdata";
// }
@GetMapping("userInfo/userdata")
public String userParams( @RequestParam(value="userEmail") String userEmail, @RequestParam(value = "password") String password, Model model){
// 각각의 파라미터를 모두 model에 넘겨줘야 한다.
model.addAttribute("userEmail", userEmail);
model.addAttribute("password", password);
return "/userInfo/userdata";
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 th:text="${username} + '님 회원 정보입니다.'"></h1>
<h1 th:text="${userEmail} + '님 로그인 성공!'"></h1>
<h1 th:text="'비밀번호 : ' + ${password}"></h1>
<h1>회원 정보</h1>
</body>
</html>
package com.example.capstone.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class LoginController {
@GetMapping("/start/login")
public String userLogin(){
return "/start/login";
}
// @GetMapping("userInfo/userdata")
// public String userId( @RequestParam(value = "userid", required = false) String uid, Model model ){
//
// model.addAttribute("userid", uid);
//
// return "/userInfo/userdata";
// }
@GetMapping("userInfo/userdata")
public String userData(
@RequestParam( value = "email") String email,
@RequestParam( value = "nickname") String nickname,
@RequestParam( value = "username") String username,
@RequestParam( value = "password") String password,
Model model ){
model.addAttribute("email",email);
model.addAttribute("nickname",nickname);
model.addAttribute("username",username);
model.addAttribute("password",password);
return "userInfo/userdata";
}
}
일부 파라미터에만 required=false를 설정해주면 그 파라미터를 전달해주지 않더라도 에러 페이지를 발생시키지 않음.
'Back-End > Spring Boot' 카테고리의 다른 글
[ Spring boot ] DTO 객체 및 폼과 뷰페이지 ③ (0) | 2022.05.08 |
---|---|
[ Spring boot ] DTO 객체 및 폼과 뷰페이지 ② (0) | 2022.05.08 |
[ Spring boot ] DTO 객체 및 폼과 뷰페이지 ① (0) | 2022.05.07 |
[ Spring boot ] Spring boot 프레임워크 ③ (0) | 2022.05.02 |
[ Spring boot ] Spring boot 프레임워크 ① (0) | 2022.04.13 |