목표
- Ajax를 통해 수정시 주민번호가 DB데이터의 주민번호와 일치하지 않으면 수정이 진행 불가능하게 설정
<script>
function ajaxRequest2()
{
$.post("ajaxssn.action", {ssn2 : $("#ssn2").val(), employeeId : $("#employeeId").val()}, function(data)
{
if($("#ssn2").val() != $.trim(data))
{
$("#err").html("주민번호가 일치하지 않습니다.");
$("#err").css("display", "inline");
return;
}
else
$("#employeeForm").submit();
});
}
</script>
- 이와같이 함수를 선언하고 직원 수정 버튼이 눌렸을때 실행되게 한다. $.trim()을 쓰지않으면 응답된 데이터에 공백에 의해 무조건 다르다고 나올수있다.
- 더 좋은방법은 응답된 데이터를 가져오는것이 아닌 Controller에서 가져온데이터를 비교하고 맞다 아니다를 뜻하는 flag값을 가져오는것이 MVC패턴에서 더 옳다
위와 같은 방법은 View에서 데이터 비교처리를 하는것이므로 옳지 않음
EmployeeDAO.java
- 오라클에서 사용자가 입력한 주민번호 뒷자리를 통해 복호화를 시도하고 그에 따른 결과를 반환하게 하는 메소드 생성
@Override
public String searchSSN(String ssn2,String employeeId) throws SQLException
{
Connection conn = dataSource.getConnection();
String result = "";
String sql = "SELECT CRYPTPACK.DECRYPT(SSN2, ?) AS SSN2 FROM EMPLOYEE WHERE EMPLOYEEID = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, ssn2);
pstmt.setString(2, employeeId);
ResultSet rs = pstmt.executeQuery();
if(rs.next())
{
result = rs.getString("SSN2");
}
rs.close();
pstmt.close();
conn.close();
return result;
}
AjaxssnController.java
- 위에서 생성한 EmployeeDAO의 searchSSN 메소드를 통해 복호화 시도 결과를 가져올 Ajax 컨트롤러
package com.test.mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class AjaxssnController implements Controller
{
private IEmployeeDAO dao;
public void setDao(IEmployeeDAO dao)
{
this.dao = dao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
String ssn2 = request.getParameter("ssn2");
String employeeId = request.getParameter("employeeId");
String result ="";
ModelAndView mav = new ModelAndView();
try
{
result = dao.searchSSN(ssn2, employeeId);
System.out.println(result);
mav.addObject("ssn2", result);
} catch (Exception e)
{
}
mav.setViewName("Ajaxssn");
return mav;
}
}
Ajaxssn.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
${ssn2}
EmployeeList.jsp
<script>
$(".deleteBtn").click(function()
{
if(confirm("현재 선택한 데이터를 정말 삭제하시겠습니까?"))
{
$(location).attr("href","employeedelete.action?employeeId="+$(this).val());
}
});
</script>
EmployeeDeleteController.java
public class EmployeeDeleteController implements Controller
{
private IEmployeeDAO dao;
public void setDao(IEmployeeDAO dao)
{
this.dao = dao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
ModelAndView mav = new ModelAndView();
String employeeId = request.getParameter("employeeId");
try
{
dao.remove(employeeId);
mav.setViewName("redirect:employeelist.action");
} catch (Exception e)
{
System.out.println(e.toString());
}
return mav;
}
}