예제)성적관리 내가 짠 코드(+EL문으로 변환해보기, 문제 발생)...문제 해결과정

꿈꾸는하늘·2024년 3월 21일

JSP

목록 보기
11/25

숙제로 내주신 정처기 실기문제 예제를 직접 구현해보았다.
java 코드로는 큰 어려움 없이 원활하게 구현했는데,
EL로 바꿔서 구현하려니까 제일 문제라고 생각했던 부분이
java 함수를 그대로 사용해도 되는가? 였는데 서치해본 결과 EL도 표현식과 마찬가지이기 때문에 EL문에도 java 함수 그대로 사용할 수 있다는 점을 새로 알게됨ㅎㅎ

그런데 문제는, EL문으로 변환하면서 학생정보현황에 주민번호가 3으로 시작할 경우 성별이 남자로 출력되어야 하는데 전부 여자로만 출력되었다...

java 코드로 구현한 결과 ↓ (모두 제대로 구현하였음)





문제의 EL문....성별이 전부 여자로 출력됨😢😢

  • StudentInfo.jsp (java 버전)
<%@page import="dto.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="dao.StudentDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
section{
	width : 1000px;
	margin: 50px auto;
}
 table{
        border-collapse: collapse;
        width : 1000px;
        }
        tr,th,td{
        border : 1px solid black;
        padding : 15px;
        text-align : center;}
</style>
</head>
<body>
<%@ include file="./HeaderAndNav.jsp" %>
	
<%
	StudentDao dao = new StudentDao(application);
	ArrayList<Student> students = dao.allStudent();
	String sex = "";
%>
<section>
	<table>
		<tr>
			<th>학번</th>
			<th>이름</th>
			<th>주민번호</th>
			<th>학과명</th>
			<th>성별</th>
			<th>전화번호</th>
			<th>이메일</th>
		</tr>
		<% for(Student tmp : students){
			if(tmp.getJumin().charAt(6)=='3'){
				sex = "남자";
			}else{
				sex = "여자";
			}
		%>	
			<tr>
				<td><%=tmp.getId() %></td>
				<td><%=tmp.getName() %></td>
		<%
				String jumin = tmp.getJumin().substring(0, 6)+"-"+tmp.getJumin().substring(6);
		%>
				<td><%=jumin %></td>
				<td><%=tmp.getDeptName() %></td>
				<td><%=sex%></td>
				<td><%=tmp.getPhone() %></td>
				<td><%=tmp.getEmail() %></td>
				
			</tr>
			
		<%}%>
		
		
	</table>
</section>
<%@ include file="./Footer.jsp" %>
</body>

</html>

  • StudentInfo.jsp (EL 버전)
<%@page import="dto.Student"%>
<%@page import="java.util.ArrayList"%>
<%@page import="dao.StudentDao"%>
<%@ 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>
<style>
section{
	width : 1000px;
	margin: 50px auto;
}
 table{
        border-collapse: collapse;
        width : 1000px;
        }
        tr,th,td{
        border : 1px solid black;
        padding : 15px;
        text-align : center;}
</style>
</head>
<body>
<c:import url="./HeaderAndNav.jsp"></c:import>
	
<%
	StudentDao dao = new StudentDao(application);
	ArrayList<Student> students = dao.allStudent();
	String sex = "";
	
	request.setAttribute("students"	, students);
	
%>
<section>
	<table>
		<tr>
			<th>학번</th>
			<th>이름</th>
			<th>주민번호</th>
			<th>학과명</th>
			<th>성별</th>
			<th>전화번호</th>
			<th>이메일</th>
		</tr>
		<c:forEach items="${students }" var="tmp">
		<c:set var="sex" value=""/>
			<c:choose>
				<c:when test="${tmp.jumin.charAt(6) == '3'}"> ${sex ="남자";''}</c:when>
				<c:otherwise>${sex ="여자";''}</c:otherwise>
			</c:choose>
			<tr>
				<td>${tmp.id }</td>
				<td>${tmp.name }</td>
				<c:set var="jumin" value="${tmp.jumin.substring(0, 6)}-${tmp.jumin.substring(6)}"/>
				<td>${jumin }</td> 
				<td>${tmp.deptName }</td>
				<td>${sex }</td>
				<td>${tmp.phone }</td>
				<td>${tmp.email }</td>
			</tr>
		</c:forEach> 
	</table>
</section>
<c:import url="./Footer.jsp"></c:import>
</body>
</html>

<c:when test="${tmp.jumin.charAt(6) == '3'}"> ${sex ="남자";''}</c:when>
이 코드에서 조건식에 문제가 있어서 여자로 출력된다는 것은 바로 알았지만,
도대체 뭐가 문제인건지 아무리 생각해도 모르겠고
같이 공부하던 동생이랑도 계속 생각해보고 코드를 이리저리 바꿔봐도 계속해서 여자로 출력...이 부분에서 한시간 이상 헤맸다ㅠㅠ
웃긴건 tmp.jumn.charAt(6)를 출력하면 아래 사진처럼 남자는 3 여자는 4로 출력되었는데

tmp.jumin.charAt(6) == '3'를 출력하면 전부 false로 출력되었음..
따옴표 없이 출력도 해보고 tmp.jumin.charAt(6) eq 3으로도 바꿔보았으나 전부 여자😢

하다하다 gpt한테도 물어봤는데 계속 나랑 같은 코드를 알려줌
여자로 출력된다구....

도저히 해결하지 않고는 궁금해서 못 참을 것 같아 실례인걸 알면서도 늦은시간에 선생님께 카톡으로 SOS😱

선생님이 알려주신대로 바꿔보니까 바로 해결되었다 역시 선생님👍👍

너무 오랫동안 검색하고 수정해보고 gpt도 해결못한 부분을 선생님께서 바로 해결해주셨따ㅠㅠ 절대 안까먹을듯.. 이렇게 또 하나 배웁니다

결론 :> tmp.jumin.charAt(6) == '3'에서 3이 문자열로 인식되기 때문에tmp.jumin.charAt(6).toString()으로 문자열을 받아 이것이 문자열 3과 동일한가?를 비교해줘야됨!!

0개의 댓글