update.jsp파일의 user이름을 뿌려주기위해 'EL표현식'으로 감싸주어 '변수'로 처리해주었고 문법에 이상이 없었으나 '프로필페이지'로 넘어가는 과정에서 JavaScript의 문법이 오류라고 계속 뜸.
@RequiredArgsConstructor
@Service
public class UserService {
private final UserRepository userRepository;
private final BCryptPasswordEncoder bCryptPasswordEncoder;
public User 회원프로필(int userId) {
//SELECT * FROM image WHERE userId = :userId;
User userEntity = userRepository.findById(userId).orElseThrow(() -> { //쿼리가 이닌 JPA로
throw new CustomException("해당 프로필 페이지는 없는 페이지입니다.");
});
return userEntity;
}
-> UserService의 CustomException에 걸려 "해당 프로필 페이지는 없는 페이지입니다" 가 VSCODE에 계속해서 나타나는 상황.
그리고 id가 1인 user가 DB에 없다고 뜸.
그리고 application.yml에 create로 바꾸고 실행을 시켜도 DB가 날라가지 않는 상황이 발생함. -> 일일히 DB의 테이블들을 지워주는 작업을 진행하였다.
<li class="navi-item">
<%-- <a href="/user/1"> /user/1로 '하드코딩'이 되어있는 상황 --%>
<li class="navi-item"><a href="/user/${principal.user.id}">
<i class="far fa-user">
header.jsp에 <a href = "/user/1"> 이라고 '하드코딩'으로 id가 지정이 되있는 상황이었다. -> EL표현식으로 '변수'로 바꾸어주는 작업을 하였다.
update.jsp 파일에는 문법적인 오류가 없었다.
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../layout/header.jsp"%>
<!--프로필셋팅 메인-->
<main class="main">
<!-- 프로필셋팅 섹션 -->
<section class="setting-container">
<!-- 프로필셋팅 아티클 -->
<article class="setting__content">
<!--프로필셋팅 아이디영역-->
<div class="content-item__01">
<div class="item__img">
<img src="#" onerror="this.src='/images/person.jpeg'" />
</div>
<div class="item__username">
<h2>${principal.user.username}</h2>
</div>
</div>
<!--프로필셋팅 아이디영역end-->
<!--프로필 수정-->
<form id="profileUpdate" onsubmit="update(${principal.user.id}, event)">
<div class="content-item__02">
<div class="item__title">이름</div>
<div class="item__input">
<input type="text" name="name" placeholder="이름"
value="${principal.user.name}" required = "required"/>
</div>
</div>
<div class="content-item__03">
<div class="item__title">유저네임</div>
<div class="item__input">
<input type="text" name="username" placeholder="유저네임"
value="${principal.user.name}" readonly="readonly" />
</div>
</div>
<div class="content-item__04">
<div class="item__title">패스워드</div>
<div class="item__input">
<input type="password" name="password" placeholder="패스워드" required = "required" />
</div>
</div>
<div class="content-item__05">
<div class="item__title">웹사이트</div>
<div class="item__input">
<input type="text" name="website" placeholder="웹 사이트"
value="${principal.user.website}" />
</div>
</div>
<div class="content-item__06">
<div class="item__title">소개</div>
<div class="item__input">
<textarea name="bio" id="" rows="3">${principal.user.bio}</textarea>
</div>
</div>
<div class="content-item__07">
<div class="item__title"></div>
<div class="item__input">
<span><b>개인정보</b></span> <span>비즈니스나 반려동물 등에 사용된 계정인 경우에도
회원님의 개인 정보를 입력하세요. 공개 프로필에는 포함되지 않습니다.</span>
</div>
</div>
<div class="content-item__08">
<div class="item__title">이메일</div>
<div class="item__input">
<input type="text" name="email" placeholder="이메일"
value="${principal.user.email}" readonly="readonly" />
</div>
</div>
<div class="content-item__09">
<div class="item__title">전회번호</div>
<div class="item__input">
<input type="text" name="phone" placeholder="전화번호"
value="${principal.user.phone}" />
</div>
</div>
<div class="content-item__10">
<div class="item__title">성별</div>
<div class="item__input">
<input type="text" name="gender" value="${principal.user.gender}" />
</div>
</div>
<!--제출버튼-->
<div class="content-item__11">
<div class="item__title"></div>
<div class="item__input">
<button>제출</button>
</div>
</div>
<!--제출버튼end-->
</form>
<!--프로필수정 form end-->
</article>
</section>
</main>
<script src="/js/update.js"></script>
<%@ include file="../layout/footer.jsp"%>
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal" var="principal"/>
</sec:authorize>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Photogram</title>
<!-- 제이쿼리 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- Style -->
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/story.css">
<link rel="stylesheet" href="/css/popular.css">
<link rel="stylesheet" href="/css/profile.css">
<link rel="stylesheet" href="/css/upload.css">
<link rel="stylesheet" href="/css/update.css">
<link rel="shortcut icon" href="/images/insta.svg">
<!-- Fontawesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css" />
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700&display=swap" rel="stylesheet">
</head>
<body>
<header class="header">
<div class="container">
<a href="/" class="logo">
<img src="/images/logo.jpg" alt="">
</a>
<nav class="navi">
<ul class="navi-list">
<li class="navi-item"><a href="/">
<i class="fas fa-home"></i>
</a>
</li>
<li class="navi-item">
<a href="/image/popular">
<i class="far fa-compass"></i>
</a>
</li>
<li class="navi-item">
<%-- <a href="/user/1"> /user/1로 '하드코딩'이 되어있는 상황 --%>
<li class="navi-item"><a href="/user/${principal.user.id}">
<i class="far fa-user">
</i>
</a>
</li>
</ul>
</nav>
</div>
</header>
'메타코딩 SNS프로젝트' 카테고리의 다른 글
57. chapter 10 - 댓글 - 댓글 삭제하기 (0) | 2022.08.01 |
---|---|
35. 프로필 페이지 - DTO로 프로필 페이지 완성하기 (0) | 2022.07.27 |
SNS프로젝트 초기설정 (0) | 2022.07.13 |
SNS 프로젝트 chapter1. 환경설정 (0) | 2022.07.13 |
스프링부트 개념정리 with JPA 4강 - JPA란 무엇인가요? (0) | 2022.07.12 |