728x90
RedirectAttributes / addFlashAttribute
RedirectAttributes
리다이렉트 시 데이터를 전달하는 방법 중 하나로, 스프링 프레임워크에서는 RedirectAttributes를 제공한다.
리다이렉트 동작 원리
- HTTP 요청 흐름:
- 리다이렉트가 발생하면 기존 요청이 끊기고 새로운 HTTP GET 요청이 시작된다.
- 모델 데이터의 소멸:
- 리다이렉트 이전에 수행된 모델 데이터는 새로운 요청이 시작되면서 사라지기 때문에, 리다이렉트를 통해 모델을 전달하는 것은 불가능하다.
쿼리스트링 사용의 문제점
- 데이터를 전달하기 위해 쿼리스트링을 사용할 경우, URL에 데이터가 노출되는 단점이 있다.
RedirectAttributes 사용의 장점
- 플래시 속성 사용:
- RedirectAttributes는 리다이렉트 전 플래시 속성을 세션에 저장하고, 리다이렉트 후 해당 속성을 세션에서 모델로 이동시킨다.
- 이 방식은 헤더에 파라미터를 붙이지 않기 때문에 URL에 노출되지 않는다.
- 일회성 속성:
- addFlashAttribute를 사용하여 일회성 성공 알림 등을 구현할 수 있다.
- 플래시 속성은 일회성으로, 새로고침하면 사라진다.
cf)
@PostMapping("/submit")
public String handleFormSubmission(RedirectAttributes redirectAttributes) {
// 비즈니스 로직 수행 후
redirectAttributes.addFlashAttribute("message", "성공적으로 처리되었습니다.");
return "redirect:/success";
}
@GetMapping("/success")
public String showSuccessPage(Model model) {
// 플래시 속성으로부터 데이터 가져오기
String message = (String) model.getAttribute("message");
model.addAttribute("message", message);
return "successPage";
}
실제 구현 코드
package kr.bit.controller;
import kr.bit.entity.Member;
import kr.bit.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpSession;
@Controller
public class MemberController {
@Autowired
MemberMapper memberMapper;
@RequestMapping(value = "/memberJoin")
public String memberJoin() {
return "member/join";
}
@RequestMapping("/memberRegisterCheck") //ajax에서 넘긴 id값을 주입받음
public @ResponseBody int memberRegisterCheck(@RequestParam("memberID") String memberID) {
Member m = memberMapper.registerCheck(memberID);
if (m != null || memberID.equals("")) {
return 0; // 이미 존재하는 아이디
}
return 1; //새로 생성되는 아이디
}
@RequestMapping("/memberRegister")
public String memberRegister(Member member, String memberPw1, String memberPw2, RedirectAttributes rttr, HttpSession session) {
if (member.getMemberID().equals("") ||
memberPw1.equals("") ||
memberPw2.equals("") ||
member.getMemberName().equals("") ||
member.getMemberGender().equals("") ||
member.getMemberEmail().equals("")) {
rttr.addFlashAttribute("msg1", "실패!");
rttr.addFlashAttribute("msg2", "필수 입력사항을 모두 입력해주세요!");
return "redirect:/memberJoin";
}
if (!memberPw1.equals(memberPw2)) {
rttr.addFlashAttribute("msg1", "실패!");
rttr.addFlashAttribute("msg2", "비밀번호가 일치하지 않습니다!");
return "redirect:/memberJoin";
}
int result = memberMapper.register(member); // db에 회원정보 저장
member.setMemberProfile("");
if (result == 1) { //1행 추가됨 -> insert 성공되면
rttr.addFlashAttribute("msg1", "a");
rttr.addFlashAttribute("msg2", "회원가입에 성공했습니다");
session.setAttribute("memberVo",member);
return "redirect:/";
} else {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "회원가입에 실패했습니다");
return "redirect:memberJoin/";
}
}
}
join.jsp
추가 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
if (${!empty msg1}) {
$("#msgType").attr("class", "modal-content panel-warning");
$("#failModal").modal("show");
}
});
function doubleCheck() {
let memberID = $("#memberID").val(); // 폼에서 적은 id값 가져오기
$.ajax({
url: "${root}/memberRegisterCheck",
type: "get",
data: {"memberID": memberID},
success: function (result) {
if (result == 1) {
$("#checkMessage").html("사용할 수 있는 아이디입니다.");
} else {
$("#checkMessage").html("사용할 수 없는 아이디입니다.");
}
$("#exampleModal").modal("show");
},
error: function () {
alert("error");
}
});
}
function goInsert(){
let memberAge=$("#memberAge").val();
if(memberAge==0 || memberAge==""){ // 입력한 값과 비교하기 위해서 공백처리(입력한값)
alert("나이를 입력하세요!");
return false;
}
document.frm.submit(); //서버에 전송
}
function passwordCheck() {
let memberPw1 = $("#memberPw1").val();
let memberPw2 = $("#memberPw2").val();
if (memberPw1 != memberPw2) {
$("#passMessage").html("비밀번호가 일치하지 않습니다");
} else {
$("#passMessage").html("비밀번호가 일치합니다!").css("color", "green");
$("#memberPw").val(memberPw1); // 서버에 히든값으로 전송
}
}
</script>
<style>
body {
background-color: #f8f9fa;
font-family: 'Helvetica Neue', Arial, sans-serif;
padding-top: 50px;
}
.form-container {
background: white;
padding: 40px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
}
.form-control {
border-radius: 30px;
padding: 15px;
}
.btn-custom {
border-radius: 30px;
background-color: #007bff;
border: none;
color: white;
transition: background-color 0.3s ease;
}
.btn-custom:hover {
background-color: #0056b3;
}
.modal-header {
background-color: #343a40;
color: white;
}
.modal-footer .btn-secondary {
border-radius: 30px;
}
</style>
</head>
<body>
<div class="container d-flex justify-content-center">
<div class="col-md-8 form-container">
<h2 class="text-center mb-4">회원가입</h2>
<!-- 회원가입 폼 시작 -->
<form name="frm" action="${root}/memberRegister" method="post">
<input type="hidden" id="memberPw" name="memberPw" value=""/>
<div class="mb-3">
<label for="memberID" class="form-label">아이디</label>
<div class="input-group">
<input type="text" class="form-control" id="memberID" name="memberID" placeholder="아이디를 입력해">
<button type="button" class="btn btn-custom ms-2" onclick="doubleCheck()">중복확인</button>
</div>
</div>
<div class="mb-3">
<label for="memberPw1" class="form-label">비밀번호</label>
<input type="password" class="form-control" id="memberPw1" name="memberPw1" onkeyup="passwordCheck()"
placeholder="비밀번호 입력">
</div>
<div class="mb-3">
<label for="memberPw2" class="form-label">비밀번호 확인</label>
<input type="password" class="form-control" id="memberPw2" name="memberPw2" onkeyup="passwordCheck()"
placeholder="비밀번호 확인">
</div>
<div class="mb-3">
<label for="memberName" class="form-label">이름</label>
<input type="text" class="form-control" id="memberName" name="memberName" placeholder="이름을 입력하세요">
</div>
<div class="mb-3">
<label for="memberAge" class="form-label">나이</label>
<input type="number" class="form-control" id="memberAge" name="memberAge" maxlength="10"
placeholder="나이를 입력하세요">
</div>
<div class="mb-3">
<label for="memberGender" class="form-label">성별</label>
<div class="d-flex">
<div class="form-check me-3">
<input class="form-check-input" type="radio" name="memberGender" id="male" value="남자" checked>
<label class="form-check-label" for="male">남자</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="memberGender" id="female" value="여자">
<label class="form-check-label" for="female">여자</label>
</div>
</div>
</div>
<div class="mb-3">
<label for="memberEmail" class="form-label">이메일</label>
<input type="email" class="form-control" id="memberEmail" name="memberEmail" maxlength="50"
placeholder="이메일을 입력하세요" onkeyup="emailCheck()">
</div>
<div class="d-flex justify-content-between align-items-center">
<span id="passMessage" class="text-danger"></span>
<button type="button" class="btn btn-custom" onclick="goInsert()">등록</button>
</div>
</form>
<!-- 회원가입 폼 끝 -->
</div>
</div>
<!-- 모달 -->
<div class="modal fade" id="exampleModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>메시지 확인</h3>
</div>
<div class="modal-body">
<p id="checkMessage"></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close
</button>
</div>
</div>
</div>
</div>
<!-- 실패 -->
<div class="modal fade" id="failModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content" id="msgType">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>${msg1 }</h3>
</div>
<div class="modal-body">
<p>${msg2 }</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close
</button>
</div>
</div>
</div>
</div>
</body>
</html>
로그인기능
모달 추가!
home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- jQuery 라이브러리 -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <!-- Bootstrap 라이브러리 -->
<script type="text/javascript">
$(document).ready(function () {
if(${!empty msg1}){
$("#msgType").attr("class","modal-content panel-warning");
$("#failModal").modal("show");
}
});
</script>
</head>
<body>
<div class="container">
<jsp:include page="include/top.jsp"/>
<div class="panel panel-default">
<div class="panel-body">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#home">Home</a></li>
<li><a href="MainBoard">게시판</a></li>
<li><a href="#" data-toggle="tab" >공지</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="home">
<h4>Home</h4>
<p>content</p>
</div>
<div class="tab-pane fade show " id="home1">
<h4>게시판</h4>
<p>content</p>
</div>
<div class="tab-pane fade show " id="home2">
<h4>공지</h4>
<p>content</p>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="failModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content" id="msgType">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>${msg1 }</h3>
</div>
<div class="modal-body">
<p>${msg2 }</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close
</button>
</div>
</div>
</div>
</div>
</body>
</html>
top.jsp
<%--
Created by IntelliJ IDEA.
User: thddm
Date: 2024-05-21
Time: 오후 12:52
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }"/>
<nav class="navbar navbar-expand-Lg navbar-dark bg-dark">
<div class="container-fluid">
<div class="navbar-header">
<button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#Navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="${root }/">Spring Legacy</a>
</div>
<div class="collapse navbar-collapse" id="Navbar">
<ul class="nav navbar-nav">
<li><a href="MainBoard">게시판</a></li>
</ul>
<c:if test="${empty memberVo }">
<!-- 회원정보 비어있을 경우 -->
<ul class="nav navbar-nav">
<li class="dropdown"><a class="dropdown-toggle" href="#"
data-toggle="dropdown"> 클릭! </a>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="${root }/memberLoginForm">로그인 </a></li>
<li><a class="dropdown-item" href="${root }/memberJoin">회원가입</a></li>
</ul></li>
</ul>
</c:if>
<c:if test="${!empty memberVo }">
<ul class="nav navbar-nav">
<li class="dropdown"><a class="dropdown-toggle" href="#"
data-toggle="dropdown"> 클릭! </a>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item" href="#">회원수정</a></li>
<li><a class="dropdown-item" href="#">사진</a></li>
<li><a class="dropdown-item" href="${root }/memberLogout">로그아웃</a></li>
</ul></li>
</ul>
</c:if>
</div>
</div>
</nav>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
<li class="nav-item dropdown">
<a href="${root }/">
Home
</a>
</li>
memberController
package kr.bit.controller;
import kr.bit.entity.Member;
import kr.bit.mapper.MemberMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpSession;
@Controller
public class MemberController {
@Autowired
MemberMapper memberMapper;
@RequestMapping("/memberJoin")
public String join() {
return "member/join";
}
@RequestMapping("/member/checkDuplicate")
public @ResponseBody int checkDuplicate(@RequestParam("memberID") String memberID) {
Member m = memberMapper.registerCheck(memberID);
if (m == null || memberID.isEmpty()) {
return 0;
}
return 1;
}
@RequestMapping("/memberRegister")
public String memberRegister(Member member, String memberPw1, String memberPwCheck,
RedirectAttributes rttr, HttpSession session) { //@ModelAttribute 생략 Model model 앞
if (member.getMemberID().equals("") ||
memberPw1.equals("") ||
memberPwCheck.equals("") || member.getMemberName().equals("") ||
member.getMemberGender().equals("") ||
member.getMemberEmail().equals("")) {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "입력해주세요");
return "redirect:/memberJoin";
}
if (!memberPw1.equals(memberPwCheck)) {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "비밀번호가 다릅니다");
return "redirect:/memberJoin";
}
int result = memberMapper.memberRegister(member); // db에 회원정보 삽입
member.setMemberProfile("");
if (result == 1) { //1행 추가됨 <- insert 가 성공했다는 전제하
rttr.addFlashAttribute("msg1", "성공 메세지");
rttr.addFlashAttribute("msg2", "회원가입에 성공했습니다.");
session.setAttribute("memberVo", member);
return "redirect:/";
} else {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "회원가입에 실패했습니다");
return "redirect:memberJoin/";
}
}
@RequestMapping("/memberLoginForm")
public String memberLoginForm() {
return "member/memberLoginForm";
}
@RequestMapping("/memberLogout")
public String memberLogout(HttpSession session) {
session.invalidate();
return "redirect:/";
}
@RequestMapping("/memberLogin")
public String memberLogin(Member member, RedirectAttributes rttr,
HttpSession session) {
if(member.getMemberID().equals("") ||
member.getMemberPw().equals("")) {
rttr.addFlashAttribute("msg1","실패");
rttr.addFlashAttribute("msg2","아이디나 비밀번호를 입력하세요");
return "redirect:memberLoginForm/";
}
Member memberVo=memberMapper.memberLogin(member);
//id와 pw가 일치할경우 회원정보들을 memberVo에 저장
if(memberVo!=null) {
rttr.addFlashAttribute("msg1","성공");
rttr.addFlashAttribute("msg2","로그인 되었습니다");
session.setAttribute("memberVo", memberVo);
return "redirect:/";
}
else {
rttr.addFlashAttribute("msg1","실패");
rttr.addFlashAttribute("msg2","로그인 다시 하세요");
return "redirect:memberLoginForm/";
}
}
}
로그인 사용자 출력
바디 부분에 추가
<body>
<div class="container">
<jsp:include page="include/top.jsp"/>
<c:if test="${empty memberVo }">
<h3>Spring Legacy</h3>
</c:if>
<c:if test="${!empty memberVo}">
<h3>${memberVo.memberName}님 환영합니다!</h3>
</c:if>
회원정보수정
memberUpdateForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
if(${!empty msg1}){
$("#msgType").attr("class","modal-content panel-warning");
$("#failModal").modal("show");
}
});
function passwordCheck(){
let memberPw1=$("#memberPw1").val();
let memberPw2=$("#memberPw2").val();
if(memberPw1 != memberPw2){
$("#passMessage").html("비밀번호가 일치하지 않습니다");
}
else{ //(비번, 비번확인이 일치한다면)
$("#passMessage").html("비밀번호가 일치합니다").css("color", "yellowgreen");
$("#memberPw").val(memberPw1); //히든 value값에 비번 넣음
}
}
function goUpdate(){
let memberAge=$("#memberAge").val();
if(memberAge==0 || memberAge==""){
alert("나이를 입력하세요!");
return false;
}
document.frm.submit(); //서버에 전송
}
</script>
</head>
<style>
body {
background-color: #f8f9fa; /* 배경색 변경 */
}
.panel-heading {
background-color: #007bff; /* 헤더 색 변경 */
color: white;
}
.form-control {
border-radius: 25px; /* 입력 필드 둥글게 */
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* 입력 필드 그림자 */
}
.btn-primary {
background-color: #ff4081; /* 버튼 색 변경 */
border-color: #ff4081;
border-radius: 25px;
}
.btn-primary:hover {
background-color: #f06292; /* 버튼 호버 효과 */
border-color: #f06292;
}
</style>
<body>
<div class="container">
<jsp:include page="../include/top.jsp"/>
<div class="panel panel-default">
<div class="panel-heading">회원 정보 수정
</div>
<div class="panel-body">
<form name="frm" action="${root }/memberUpdate" method="post">
<input type="hidden" id="memberID" name="memberID" value="${memberVo.memberID }" />
<input type="hidden" id="memberPw" name="memberPw" value="" />
<table class='table table-bordered' style="text-align: center;">
<tr>
<td style="width: 100px; vertical-align: middle;">아이디</td>
<td>${memberVo.memberID }</td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;" />비밀번호
</td>
<td colspan="2"><input class="form-control" type="password"
id="memberPw1" name="memberPw1" onkeyup="passwordCheck()"
placeholder="비밀번호를 입력" /></td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;" />비밀번호확인
</td>
<td colspan="2"><input class="form-control" type="password"
id="memberPw2" name="memberPw2" onkeyup="passwordCheck()"
placeholder="비밀번호 확인" /></td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;" />이름
</td>
<td colspan="2"><input class="form-control" type="text"
id="memberName" name="memberName" placeholder="이름을 확인"
value=${memberVo.memberName } /></td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;">나이</td>
<td colspan="2"><input id="memberAge" name="memberAge"
class="form-control" type="number" maxlength="10"
placeholder="나이를 입력하세요."
value=${memberVo.memberAge } /></td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;">성별</td>
<td colspan="2">
<div class="form-group"
style="text-align: center; margin: 0 auto;">
<input type="radio" name="memberGender" autocomplete="off"
value="남자"
<c:if test="${memberVo.memberGender eq '남자'}">checked</c:if> />남자
<input type="radio"
name="memberGender" autocomplete="off" value="여자"
<c:if test="${memberVo.memberGender eq '여자'}">checked</c:if> />여자
</div>
</div>
</td>
</tr>
<tr>
<td style="width: 100px; vertical-align: middle;">이메일</td>
<td colspan="2"><input id="memberEmail" name="memberEmail"
class="form-control" type="text" maxlength="20"
placeholder="이메일을 입력하세요." value="${memberVo.memberEmail }"/></td>
</tr>
<tr>
<td colspan="3" style="text-align: left;"><span
id="passMessage" style="color: red"></span><input type="button"
class="btn btn-primary btn-sm pull-right" value="수정"
onclick="goUpdate()" /></td>
</tr>
</table>
</form>
</div>
<!-- 모달 -->
<div class="modal fade" id="exampleModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>메시지 확인</h3>
</div>
<div class="modal-body">
<p id="checkMessage"></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- 실패 -->
<div class="modal fade" id="failModal" role="dialog">
<div class="modal-dialog">
<div class="modal-content" id="msgType">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>${msg1 }</h3>
</div>
<div class="modal-body">
<p>${msg2 }</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary"
data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
memberController
@RequestMapping("/memberUpdateForm")
public String memberUpdateForm() {
return "member/memberUpdateForm";
}
@RequestMapping("/memberUpdate")
public String memberUpdate(Member member, String memberPw1, String memberPw2,
RedirectAttributes rttr, HttpSession session) { //@ModelAttribute 생략 Model model 앞
if (member.getMemberID().equals("") ||
memberPw1.equals("") ||
memberPw2.equals("") || member.getMemberName().equals("") ||
member.getMemberGender().equals("") ||
member.getMemberEmail().equals("")) {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "입력해주세요");
}
if (!memberPw1.equals(memberPw2)) {
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "비밀번호가 다릅니다");
return "redirect:/memberUpdateForm";
}
int result = memberMapper.memberUpdate(member);
if (result == 1) {
rttr.addFlashAttribute("msg1", "성공");
rttr.addFlashAttribute("msg2", "회원정보 수정에 성공했습니다.");
session.setAttribute("memberVo", member);
//수정된 데이터들을 세션영역 memberVo에 담아서 redirect로 화면이동
return "redirect:/";
} else { // 수정 실패했을 때
rttr.addFlashAttribute("msg1", "실패");
rttr.addFlashAttribute("msg2", "회원정보 수정에 실패했습니다.");
return "redirect:/memberUpdateForm";
}
}
MemberMapper.xml
<update id="memberUpdate" parameterType="kr.bit.entity.Member">
update member_table
set memberPw=#{memberPw},
memberName=#{memberName},
memberAge=#{memberAge},
memberGender=#{memberGender},
memberEmail=#{memberEmail}
where memberID = #{memberID}
</update>
MemberMapper.interface
package kr.bit.mapper;
import kr.bit.entity.Member;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MemberMapper {
public Member registerCheck(String memberID);
public int memberRegister(Member member);
public Member memberLogin(Member memberVo);
public int memberUpdate(Member memberVo);
}
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] Board with xml (Ajax) III (0) | 2024.05.23 |
---|---|
[Spring] Board with xml (Ajax) I (1) | 2024.05.20 |
[Spring] BOARD CRUD 기능 설명 (0) | 2024.05.17 |
[Spring] Board CRUD (Board Delete, Page ) (0) | 2024.05.17 |
[Spring] Board CRUD (Board info, Board Modify) (0) | 2024.05.17 |