잡동사니에도 사랑을

[21.10.27] 우편번호 검색 및 글쓰기(JSTL 정의) 본문

JAVA_EE/MVC+JQuery+Mybatis

[21.10.27] 우편번호 검색 및 글쓰기(JSTL 정의)

luvforjunk 2021. 10. 27. 10:15
728x90
반응형

1) 우편번호 검색 - (2)

 

view → controller → service → DAO → DB 순으로 데이터를 전달한다.

 

 

 

저번 시간에 이어서 우편번호 검색 기능을 좀더 세부적으로 정리해나가는 시간을 갖도록 하자.

 

 

////////command.properties

 

 

 

////////CheckPost.java

package member.service;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.control.CommandProcess;

import member.bean.ZipcodeDTO;
import member.dao.MemberDAO;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class CheckPostSearchService implements CommandProcess {

	@Override
	public String requestPro(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		//데이터
		String sido = request.getParameter("sido");
		String sigungu = request.getParameter("sigungu");
		String roadname = request.getParameter("roadname");

		System.out.println(sido + "," + sigungu + "," + roadname);

		//DB
		List<ZipcodeDTO> list = null;
		if (sido != null && roadname != null) {
			MemberDAO memberDAO = MemberDAO.getInstance();
			list = memberDAO.getZipcodeList(sido, sigungu, roadname);
			System.out.println("list=" + list); // 클래스명@16진수 이런 식으로 나오지 않고 [~~~, ~~~, ~~~] 이런식으로 보인다.
		}

		// list -> json으로 변환 (jar파일 넣어주기)
		JSONObject json = new JSONObject(); // json 객체
		if (list != null) {
			JSONArray array = new JSONArray(); // json Array

			for (ZipcodeDTO zipcodeDTO : list) {

				JSONObject temp = new JSONObject(); // json 객체

				temp.put("zipcode", zipcodeDTO.getZipcode());
				temp.put("sido", zipcodeDTO.getSido());
				temp.put("sigungu", zipcodeDTO.getSigungu());
				temp.put("yubmyundong", zipcodeDTO.getYubmyundong());
				temp.put("ri", zipcodeDTO.getRi());
				temp.put("roadname", zipcodeDTO.getRoadname());
				temp.put("buildingname", zipcodeDTO.getBuildingname());

				// 배열에 담아주자
				array.add(temp);
			} //for

			// json 객체에 붙이자
			json.put("list", array);
		}

		System.out.println("json=" + json);

		request.setAttribute("list", json);
		return "/member/checkPostSearch.jsp";
	}

}

 

 

////////CheckPostSearchService.java

 

 

 

 

 

결과를 잠깐 보면,

 

 

 

 

 

 

※ ERROR !!!

Could not set parameters for mapping: ParameterMapping{property='email1', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #5 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 부적합한 열 유형: 1111

 

프로그래밍을 하다보면 Error를 심심치 않게 발견할 수 있다.

에러 발생 시 빠르게 파악하고 해결하기 위해선 여러 Error 유형을 많이 접해봐야 하는데,

1시간동안 발목 붙잡은 Error 하나를 짚고 넘어가보자.

메시지 중간에 보면 Error setting null for parameter #5 라고 되어 있다.

이는 mybatis 로 넘어온 파라메터 값 중 5번째에 해당되는 값  #5 이 NULL 이어서 발생하는 에러이다. 

 

파라메터 값을 불러오고 저장하는 클래스 파일인 WriteService.java에

String name = request.getParameter("name");
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String gender = request.getParameter("gender");
String email1 = request.getParameter("email1");

...

 

다음과 같이 설정해주었었는데, 여기서 다섯번째 값인 email1이 email로 오타가 나있어 에러가 발생하였다.

 

 

 

 

 

2) 글쓰기 

 

////////menu.jsp

*주요 내용 :

→ 아이디 입력 시에만 글쓰기 버튼이 활성화될 수 있도록 기능을 변경해주었다.

<c:if> 태그를 사용하려면 taglib를 잡아줘야 한다.

 

여기서 JSTL에 대해 다시 한번 짚고 넘어가도록 하자.

 

JSTL 이란 표준 태그 라이브러리이며, 자신만의 태그를 추가할 수 있는 기능을 제공한다.

자바에서 import문을 선언하듯 JSP에서도 JSTL 확장 태그를 사용하려면 taglib 지시자로 라이브러리를 선언해줘야 한다.

 

<%@ taglib prefix="접두사" uri="URI" %>

 

주로 Core에서 c를 사용하여 <c:if>, <c:forEach> 등으로 사용한다.

JSTL 라이브러리 jar 파일이 반드시 필요하며, jar 파일을 WEB-INF/lib에 넣고,

JSTL을 사용하고자 하는 jsp 파일에 "커스텀 액션을 사용하겠다" 라는 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>을 기입해 정의를 선언해준다.

 

 

JSTL 태그 종류

 

1) c:out (prefix="c") - 변수의 값 출력

<c:out value="출력값" default="기본값" />
<c:out value="출력값">기본값</c:out>

 

2) c:set (prefix="c") - 변수에 값을 저장. setAttribute와 동일한 역할.

<c:set var="변수명" value="값" scope="page(기본값)" />
<c:set var="변수명" scope="page(기본값)">값</c:set>
기본값 -> request / session / application

 

3) c:forEach (prefix="c") - 범위 안에서 반복문 수행. for와 동일한 역할.

<c:forEach var="변수명" items="목록데이터" begin="시작인덱스" end="종료인덱스">콘텐츠</c:forEach>

 

4) c:if (prefix="c") - 조건문 수행. if와 동일한 역할

<c:if test="조건식" var="변수명" scope="page(기본값)">내용</c:if>

 

 

5) c:remove : 보관소에 저장된 값 제거

<c:remove var="변수명" scope="page(기본값)" />

 

 

 

 

////////command.properties

→ key 값을 입력하면 value가 실행할 수 있도록 구성을 만들어준다.

 

 

 

 

 

////////boardWrite.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<script type="text/javascript">
window.onload=function(){
	alert("글쓰기 성공");
}
</script>

 

 

 

 

[결과]

로그인 전 글쓰기 버튼이 활성화되지 않았음을 확인할 수 있다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'JAVA_EE > MVC+JQuery+Mybatis' 카테고리의 다른 글

[21.11.01]  (0) 2021.11.01
[21.10.28] 글쓰기와 목록(  (0) 2021.10.28
[21.10.26] MQBProject  (0) 2021.10.26
[21.10.26]  (0) 2021.10.26
[21.10.25] (MQBProject)  (0) 2021.10.25