728x90

 

시간도 배로 걸렸지만 오늘은 코딩하면서 좀 이해가 많이 된 것 같다.

 

내용에서 줄바꿈 개행문자를 바꾸는 pageContext.setattribute와 ${ fn:replace(바꿀범위, 바꿀 문자, 대체할 문자)} 부분의 이해가 머리 속에 들어왔고,

첨부파일 부분은 거의 한방에 쓸 수 있었던 것 같다. 오리지널이랑 리네임이 들어가는 부분이 좀 헷갈림

아직 댓글창 부분이랑 스크립트 아래 부분이 잘 이해 안되는게 많은데

그래도 제이쿼리 변수 선언하는 것과 왜 해당 변수들을 선언해서 썼는지 의도 파악이 되었다

data[i]부분을 for in문 돌려서 한 부분이 살짝 이해가 좀 안가는 부분이 있었는데 

댓글을 불러들이기 위한거라는 큰 틀은 이해했으니 ok

 

 

<%@ 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="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PRAC</title>

<style type="text/css">
	#boardDetailTable{width:800px; margin:auto; border-collapse:collapse; border-left:hidden;}
	#boardDetailTable tr td{padding: 5px;}
	.replyTable{margin: auto; width: 500px;} 
</style>

</head>
<body>

	<c:import url="../common/menubar.jsp"/>
	
	<h1 align="center">${board.boardId }번의 글 상세보기</h1>
	
	<form action="bupView.bo" method="post">
		<table border="1" id="boardDetailTable">
			<tr>
				<th>번호</th>
				<td>
					${board.boardId }
					<input type="hidden" name="boardId" value="${board.boardId }">
					<input type="hidden" name="page" value="${ page }">
				</td>
			</tr>
			<tr>
				<th>제목</th>
				<td>
					${ board.boardTitle }
					<input type="hidden" name="boardTitle" value="${board.boardTitle }">
				</td>
			</tr>
			<tr>
				<th>작성자</th>
				<td>
					${board.nickName }
					<input type="hidden" name="nickName" value="${ board.nickName }">
				</td>
			</tr>
			<tr>
				<th>작성날짜</th>
				<td>
					${board.boardCreateDate }
				</td>
			</tr>
			
			<tr>
				<th>내용</th>
				
				<% pageContext.setAttribute("newLineChar", "\r\n"); %>
				<td>
					${fn:replace(board.boardContent,newLineChar, "<br>") }
					<input type="hidden" name="boardContent" value="${ boardContent }">
				</td>
			</tr>
			
			
			<c:if test="${ !empty board.originalFileName }">
			<tr>
				<th>첨부파일</th>
				<td>
					<a href="${pageContext.servletContext.contextPath }/resources/buploadFiles/${ board.renameFileName }" download="${board.originalFilename }">${board.originalFileName }</a>
					<input type="hidden" name="originalFileName" value="${ board.originalFileName }">
					<input type="hidden" name="renameFileName" value="${board.renameFileName }">
				</td>
			</tr>
			</c:if>
			

			<!-- url 변수선언 -->
			<c:url var="bdelete" value="bdelete.bo">
				<c:param name="bId" value="${board.boardId }"/>
				<c:param name="renameFileName" value="${ board.renameFileName }"/>
			</c:url>
			<c:url var="blist" value="blist.bo">
				<c:param name="page" value="${ page }"/>
			</c:url>
			
			
			<!-- 로그인유저 수정삭제 버튼 보이기 -->
			<c:if test="${ loginUser.id eq board.boardWriter }">
			<tr>
				<td colspan="2" align="center">
					<button type="button">수정하기</button>
					<button type="button" onclick="location.href='${bdelete}'">삭제하기</button>
				</td>
			</tr>	
			</c:if>
	
		</table>
	</form>
	
	
	
	
	<!-- 시작페이지,목록보기 이동버튼 -->
	<p align="center">
		<button type="button" onclick="location.href='home.do'">시작페이지</button>
		<button type="button" onclick="location.href='${blist}'">목록보기</button>
	</p>



	
	<!-- 댓글창 -->
	<table class="replyTable">
		<tr>
			<td><textarea cols="55" rows="3" id="replyContent"></textarea></td>
			<td><button id="rSubmit">댓글 등록</button></td>
		</tr>
	</table>
	<table class="replyTable" id="rtb">
		<thead>
			<tr>
				<td colspan="2"><b id="rCount"></b></td>
			</tr>	
		</thead>
		<tbody>
			<!-- 쓴 댓글 보이는 부분 -->
		</tbody>
	</table>
	
	<script>
		// 댓글 등록 : jQuery ajax
		$('#rSubmit').click(function(){
			var rContent = $('#replyContent').val();
			var refBId = ${board.boardId};
			
			$.ajax({
				url:'addReply.bo',
				data:{replyContent:rContent, boardId:reBId},
				success:function(data){
					console.log(data);
					if(data == 'success'){
						$('#replyContent').val(' ');
					}
				},
				error:function(data){
					console.log(data);
				}
			});
		});
	
		// 등록한 댓글 읽어오기
		function getReplyList(){
			$.ajax({
				url:'rList.bo',
				data:{bId:${board.boardId}},
				success:function(data){
					console.log(data);
					
					$tableBody = $('#rtb tbody');
					$tableBody.html('');
					
					// 변수선언
					// var a; 자바스크립트 변수 // var $a; jQuery 변수
					var $tr;
					var $writer;
					var $content;
					var $date;
					$('#rCount').text('댓글('+data.length+')');
					
					if(data.length > 0){
						for(var i in data){
							$tr = $('<tr>');
							$writer = $('<td>').css('width','100px').text(data[i].nickName); 
							$content = $('<td>') .text(data[i].replyContent);
							$date = $('<td width="100px">').text(data[i].replyCreateDate);	
							
							$tr.append($writer);
							$tr.append($content);
							$tr.append($date);
							$tableBody.append($tr);
						}
					}else{
						$tr = $('<tr>');
						$content = $('<td colspan="3">').text('등록된 댓글이 없습니다.');
						
						$tr.append($content);
						$tableBody.append($tr);
					}
				},
				error:function(data){
					console.log(data);
				}
			});
		}
	
	
		// 다른 사람이 쓴 댓글도 볼 수 있게 5초마다 읽어오도록
		function(){
			getReplyList();
			
			setInterval(function(){
				getReplyList();
			}, 5000);
		});
	
	</script>



</body>
</html>
728x90
반응형
728x90

 

<c:url>로 var변수를 만들고, value에 해당 url을 넣고

이 var 변수를 다른 button type="button"에서 onclick으로 불러내기

기존 버튼 온클릭에서 url 직접 입력에서 다른 코드로 한번 더 해봄

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<link rel="stylesheet" type="text/css" href="${ pageContext.servletContext.contextPath }/resources/css/member-style.css"> 

<style>
	#myInfoTable td{text-align:center;}
</style>

</head>
<body>

	<c:import url="..common/menubar.jsp"/>
	
	<h1 align="center">'${ loginUser.name }'님의 정보 보기</h1>
	
	<div class="centerText">
		<table id="myInfoTable">
			<tr>
				<th>아이디</th>
				<td>${loginUser.id }</td>
			</tr>
			<tr>
				<th>이름</th>
				<td>${loginUser.name }</td>
			</tr>
			<tr>
				<th>닉네임</th>
				<td>${loginUser.nickName }</td>
			</tr>
			<tr>
				<th>성별</th>
				<c:if test="${loginUser.gender eq 'M' }">
					<td> 남성 </td>
				</c:if>
				<c:if test="${loginUser.gender eq  'F'}">
					<td> 여성 </td>
				</c:if>
			</tr>
			<tr>
				<th>나이</th>
				<td>${loginUser.age }</td>
			</tr>
			<tr>
				<th>이메일</th>
				<td>${ loginUser.email }</td>
			</tr>
			<tr>
				<th>전화번호</th>
				<td>${loginUser.phone }</td>
			</tr>
			<tr>
				<th>주소</th>
				<td>
					<c:forTokens var="ft" items="${loginUser.address }" delims="/" varStatus="vs">
						<c:if test="${vs.index eq 0 && ft >= '0' && ft <= '99999' }">
							(${ft })
						</c:if>
						<c:if test="${vs.index eq 0 && !(ft >= '0' && ft <= '99999')}">
							${ft }
						</c:if>
						<c:if test="${vs.index eq 1 }">
							${ft }
						</c:if>
						<c:if test="${vs.index eq 2 }">
							${ft }
						</c:if>
					</c:forTokens>
					
				</td>
			</tr>
			
			<tr>
				<td colspan="2"	align="center">
					<c:url var="mpwdUpdateView" value="mpwdUpdateView.me"/>
					<button type="button" onclick="${mpwdUpdateView}">비밀번호 수정</button>
					<button type="button" onclick="location.href='mupdateView.me'">정보수정</button>
					<c:url var="mdelete" value="mdelete.me"/>
					<button type="button" onclick="location.href='${ mdelete }'">회원탈퇴</button>
					<button type="button" onclick="home.do">시작페이지로</button>
				</td>
			</tr>
		</table>
	</div>




</body>
</html>
728x90
반응형
728x90

 

반복 반복

머리에 기억되도록 반복

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title> practice </title>
<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath }/resources/css/member-style.css">

</head>
<body>

	<c:import url="../common/menubar.jsp"/>
	
	<h1 align="center">${loginUser.name }님의 정보 수정</h1>
	
	<div class="centerText">
		<form action="mupdate.me" method="post">
			<table>
				<tr>
					<th>아이디</th>
					<td>${loginUser.id }<input type="hidden" name="id" value="${loginUser.id }"></td>
				</tr>
				<tr>
					<th>이름</th>
					<td><input type="text" name="name" value="${loginUser.name }"></td>
				</tr>
				<tr>
					<th>닉네임</th>
					<td><input type="text" name="nickName" value="${loginUser.nickName }"></td>
				</tr>
				<tr>
					<th>성별</th>
					<c:if test="${ loginUser.gender == 'M' }">
						<td>
							<input type="radio" name="gender" value="M" checked>남
							<input type="radio" name="gender" value="F">여
						</td>
					</c:if>
					<c:if test="${ loginUser.gender == 'F' }">
						<td>
							<input type="radio" name="gender" value="M">남
							<input type="radio" name="gender" value="F" checked>여
						</td>
					</c:if>
				</tr>
				<tr>
					<th>나이</th>
					<td><input type="number" name="age" value="${loginUser.age }" min="18" max="100"></td>
				</tr>
				<tr>
					<th>이메일</th>
					<td><input type="email" name="email" value="${loginUser.email }"></td>
				</tr>
				<tr>
					<th>전화번호</th>
					<td><input type="tel" name="phone" value="${ loginUser.phone }"></td>
				</tr>
				
				
				<c:forTokens var="ft" items="${ loginUser.address }" delims="/" varStatus="vs">
					<c:if test="${ vs.index eq 0 && ft >= '0' && ft <= '99999' }">
						<c:set var="post" value="${ ft }"/>
					</c:if>
					<c:if test="${ vs.index eq 0 && !(ft >= '0' && ft <= '99999') }">
						<c:set var="address1" value="${ ft }"/>
					</c:if>
					<c:if test="${ vs.index eq 1 }">
						<c:set var="address1" value="${ ft }"/>
					</c:if>
					<c:if test="${ vs.index eq 2 }">
						<c:set var="address2" value="${ ft }"/>
					</c:if>			
				</c:forTokens>
				
				<tr>
					<th>우편번호</th>
					<td>
						<input type="text" name="post" class="postcodify_postcode5" value="${ post }" size="6">
						<button type="button" id="postcodify_search_button">검색</button>
					</td>
				</tr>
				<tr>
					<th>도로명 주소</th>
					<td>
						<input type="text" name="address1" class="postcodify_address" value="${address1 }" size="30">
					</td>
				</tr>
				<tr>
					<th>상세 주소</th>
					<td>
						<input type="text" name="address2" class="postcodify_extra_info" value="${ address2 }" size="30">
					</td>
				</tr>
				
				
				<!-- jQuery와 Postcodify를 로딩한다. -->
				<script src="//d1p7wdleee1q2z.cloudfront.net/post/search.min.js"></script>
				<script>
					// 검색 단추를 누르면 팝업 레이어가 열리도록 설정한다.
					$(function(){
						$("#postcodify_search_butto").postcodifyPopUp();
					});
				</script>
				
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value="수정하기">
						<c:url var="mdelete" value="${ loginUser.id }">
							<c:param name="id" value="${ loginUser.id}"/>
						</c:url>
						<button type="button" onclick="location.href='${ mdelete }'">탈퇴하기</button>
						<button type="button" onclick="location.href='home.do'">시작 페이지로</button>
					</td>
				</tr>
				
			</table>
		</form>
	</div>



</body>
</html>
728x90
반응형
728x90

 

 

코딩 자체가 별다른 에너지가 들지 않게 계속 써서 익숙해지기

전체 구조파악하고 세부적인 코드 써보기 & 반복

머리 아프거나 하기 싫을 때 이렇게만 해도 집중이 되고,

코딩을 손에 놓지 않고 계속 실력 향상을 할 수 있다!

짜투리 시간에 하기도 좋음. 3-40분정도 걸린 듯

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script
  src="https://code.jquery.com/jquery-3.6.0.min.js"
  integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
  crossorigin="anonymous"></script>
  

<style>
	.nav{margin-left:auto; margin-right:auto; text-align:center;}
	.menu{
		disply:inline-block; background:$e4fc41; text-align:center;
		line-height:50px; width:150px; height:50px; border-radius:20px;
		margin-left:5%; margin-right:5%;
	}
	.menu:hover{background:#b0c903; font-weight:bolder; cursor:pointer;}
	a:link{color:black; text-decoration:none;}
	a:visited{color:black; text-decoration:none;}
	
</style>

</head>
<body>

	<!-- 메뉴바는 어느 페이지든 포함하고 있을 테니 여기서 contextPath 변수 값 만들기 -->
	<c:set var="contextPath" value="${pageContext.servletContext.contextPath }" scope="application"/>
	
	<h1 align="center">Let's do it!!</h1>
	<br>
	
	<div class="loginArea" align="right">
		<c:if test="${ empty sessionScope.loginUser }"> <!-- user가 로그인 안했으면 로그인하게 id,pw 보여주는 창 보여줌-->
			<form action="login.me" method="post">
				<table id="loginTable" style="text-align:center;">
					<tr>
						<td>아이디</td>
						<td><input type="text" name="id"></td>
						<td rowspan="2">
							<button id="loginBtn">로그인</button>
						</td>
					</tr>
					<tr>
						<td>비밀번호</td>
						<td><input type="password" name="pwd"></td>
					</tr>
					<tr>
						<td colspan="3">
							<button type="button" onclick="location.href='enrollView.me'">회원가입</button>
							<button type="button">아이디/비밀번호 찾기</button>
						</td>
					</tr>
				</table>
			</form>
		</c:if>
		
		<c:if test="${ !empty sessionScope.loginUser }"> <!-- user가 로그인했으면 정보 변경, 로그아웃 등 보여줌 -->
			<h3 align="right"> <!-- h3태그 안에 c core와 button태그를 넣은게 신기 -->
				<c:out value="${loginUser.name }님 환영합니다."/>
				<c:url var="myinfo" value="myinfo.me"/>
				<c:url var="logout" value="logout.me"/>
				<button onclick="location.href='${myinfo}'">정보보기</button> 
				<button onclick="location.href='${logout}'">로그아웃</button>	
								<!-- c:url에서 var변수로 지정한 것을 버튼클릭하면 이동하게만듬 -->		
			</h3>
		</c:if>
		
		<!-- 위처럼 c:url을 통해서 지정할 수도 있지만 지금까지 해왔던 것처럼 바로 href에 url을 넣어도 상관없음 -->
		<div class="menubar">
			<div class="nav">
				<div class="menu"><a href="home.do">Home</a></div>
				<div class="menu"><a href="blist.bo">게시판</a></div>
			</div>
		</div>
	</div>


</body>
</html>
728x90
반응형
728x90

 

EL+JSTL

백단과 연결되서 받을 수 있게 코드

기존 배우던 코드를 쭉 편하게 따라치면서 구조 분석하고 대강 틀만보고 안보고 치면서 세부코드 치는 연습

그리고 코딩 자체가 많이 익숙해지고 에너지 소모가 덜 되서 자연스러울 수 있게 하기 위한 목적으로 

머리 안돌아갈 때마다 쭉 따라치면서 가볍게 많이 쳐야겠다


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<link rel="stylesheet" type="text/css" href="${ pageContext.servletContext.contextPath }"/resources/css/member-style.css">

<style>
    #myInfoTable td{text-align: center;}
</style>

</head>
<body>

<c:import url="../common/menubar.jsp"/>

<h1 align="center">${loginUser.name }님의 정보 보기</h1>

<div class="centerText">>
    <table border="" id="myInfoTable">
        <tr>
            <th>아이디</th>
            <td>${loginUser.id }</td>		
        </tr>
        <tr>
            <th>이름</th>
            <td>${loginUser.name</td>
        </tr>
        <tr>
            <th>닉네임</th>
            <td>${loginUser.nickName}</td>
        </tr>
        <tr>
            <th>성별</th>
            <c:if test="${loginUser.gender eq 'M'}">
                <td>남성</td>
            </c:if>
            <c:if test="${loginUser.gender eq 'F'}">
                <td>여성</td>
            </c:if>    
        </tr>
        <tr>
            <th>나이</th>
            <td>${loginUser.age}</td>
        </tr>
        <tr>
            <th>이메일</th>
            <td>${ loginUser.email}</td>
        </tr>
        <tr>
            <th>전화번호</th>
            <td>${loginUser.phone}</td>
        </tr>
        <tr>
            <th>주소</th>
            <td>
                <c:forTokens var="addr" items="${loginUser.address}" delims="/" varStatus="status">
                    <c:if test="${status.index eq 0 && addr >= '0' && addr <= '99999'">
                        (${ addr})
                    </c:if>
                    <c:if test="${status.index eq 0 && !(addr >= '0' && addr <= '99999'">
                        ${addr}
                    </c:if>
                    <c:if test="${status.index eq 1">
                        ${addr}
                    </c:if>
                    <c:if test="${status.index eq 2">
                        ${addr}
                    </c:if>
                </c:forTokens>
            </td>
        </tr>

        <tr>
            <td colspan="2" aling="center">
                <button type="button" onclick="location.href='mpwdUpdateView.me'">비밀번호 수정</button>
                <button type="button" onclick="location.href='mupdateView.me'">정보 수정</button>
                <button type="button" onclick="location.href='${m.delete}'">회원탈퇴</button>
                <button type="button" onclick="location.href='home.do'">시작 페이지로</button>
            </td>
        </tr>

    </table>
</div>






</body>
</html>
728x90
반응형
728x90

 

 

db에서 답변여부에 대한 상태를 Y or N 둘 중 하나로 받아왔다

이를 JSTL를 써서 답변대기중이나 답변완료로 바꿀려고 <c:choose>를 사용했는데

코드 내용이 오타나 잘못된게 없는 것 같은데 작동을 안했다

왜일까?

<table>
    <tr class="tbodyContent">
        <td class="tbodyTd1" width="65">${ b.qnaNo } </td>
        <td class="tbodyTd2" style="text-align:left">${ b.qnaTitle }</td>
        <td class="tbodyTd4" width="100">${ b.qnaCreateDate }</td>
        <td class="tbodyTd5" width="50"> ${b.qnaStatus} 
       		<c:choose>
       			<c:when test="$ { b.qnaStatus eq 'Y' }"><span>답변 완료</span></c:when>
       			<c:when test=" ${ b.qnaStatus eq 'N' }"><span>답변 대기중</span></c:when>
       		</c:choose>
        </td>
    </tr>   
</table>

 

test=” ${ }” 여기서 $ 앞에 공백이 있었기 때문

728x90
반응형
728x90

 

 

${ bdelete }

84번째 라인 ${ bdelete } 태그가 73번째 라인 var=”bdelete”를 가져다 쓰는거고 bdelete의 value속성은 url을 담고있음

삭제하기 버튼을 누르면 84번째 라인 ${ bdelete } 가 실행되고 var=”bdelete”가 호출되고 var=”bdelete”와 이어져있는 url인 bdelete.bo가 연결된 콘트롤러로 연결됨.

이때 74번째 라인 <c:param> 안에 pk역할을 하는 name=”bId”를 콘트롤러에서 데이터를 받게되면 ${ board.boardId } 를 받는데 db의 boardId 컬럼은 게시글 번호이므로 1,2,3,4 이런식으로 int값이 최종적으로 컨트롤러에 들어가게된다

삭제하기 버튼 누르면 bdelete쪽으로 넘길 때

<c:param name="bId" value="${ board.boardId }"/> 이부분을 가지고 넘김

 

@RequestMapping("bdelete.bo")
public String deleteBoard(@RequestParam("bId") int bId, 
						  @RequestParam("renameFileName") String renameFileName, HttpServletRequest request) {
	// boardDetailView
	// 어디서 접근해서 삭제할지도 지정해야하니 HttpServletRequest도 추가

	if(!renameFileName.equals("")) { // renameFileName이 비어있지 않다면
		deleteFile(renameFileName, request); // renameFileName을 넘겨준다, 어디서 삭제할 것인가:request
	}
	int result = bService.deleteBoard(bId);

 

728x90
반응형
728x90

 

JSP Action Tag

이전 버젼의 JSP문법을 XML기술을 이용하여 업그레이드한 태그

웹 브라우저가 아닌 웹 컨테이너에서 실행되고 결과만 브라우저로 보냄

 

표준 액션 태그와 커스텀 액션태그로 나뉨

 

1)표준 액션 태그

JSP에서 기본적으로 제공하는 태그

태그 앞에 jsp:라는 접두어 필수이고, jsp파일에서 바로 사용 가능

<jsp:include page="index.jsp"></jsp:include>

 

2)커스텀 액션태그(JSTL)

JSP 커스텀 태그 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화 하여 표준으로 제공한 것

 

사용을 위해 라이브러리 파일 추가가 필수이며, 사용할려는 라이브러리에 맞는 접두어를 사용한다

접두어로 core의 c를 많이 사용

<c:set var="test" value="500"></c:set>

 

728x90
반응형

+ Recent posts