web developer

[java] Form 전송 시 트랜잭션 예외 발생에 따른 PrintWriter를 통한 업데이트 실패 알림 및 페이지 이동 처리 본문

Language/Java

[java] Form 전송 시 트랜잭션 예외 발생에 따른 PrintWriter를 통한 업데이트 실패 알림 및 페이지 이동 처리

trueman 2024. 10. 29. 14:36
728x90
728x90
javaScript
$("form[name=formData]").attr("method", "post");
$("form[name=formData]").submit();

serviceImpl.java

 

serviceImpl.java 에서 update가 실패한 경우 throw new IllegalArgumentException 시킨다.

// 데이터베이스 업데이트 메서드 (예시)
@Override
@Transactional(rollbackFor = Exception.class)
private int updateDatabase(DataType data) {
    int flag = 0;
    try {
    
        ...
        
        if(list!=null && list.size()>0) {
        
            for(int=0; i<list.size(); i++) {
                data = list.get(i);
                
                // 데이터베이스 업데이트 로직
                int update_status = 0;
                if(list_count != null) {
                    update_status = dao.update(data);
                }

                if(update_status == 0) {
                    throw new IllegalArgumentException("the update has failed as impl.java : " + data.getId());
                }
            }
            
        }
        
        ... 
        
        flag = 1;
    }catch() {
    
    	... 
        
    }
    // 업데이트 성공 시 1 반환, 실패 시 0 반환
    return flag; 
}


I
mpl 에서 updateDatabase 메서드가 update가 실패한 경우 controller의 catch 블록으로 들어가게 된다.


Controller.java
@Controller
public class MyController {

    @PostMapping("/update")
    public void updateData(
    	@ModelAttribute DataType data, 
        DataVO dataVO,
        HttpServletResponse response
    ) {
    	PrintWriter writer = null;
    	
        try {
            // wrtier
            response.setCharacterEncoding("EUC-KR");
            writer = response.getWriter();
            
            int updateResult = updateDatabase(data); // 데이터베이스 업데이트 시도
            
            String result = (updateResult > 0) ? "Y" : "N"; // 업데이트 성공 여부에 따라 결과 설정
            if(result.equals("Y")) {
            	writer.println("<script>alert('the update has succeed'); window.location='/menu/data/val.do?id="+dataVO.getId()+"'<script>");
            }
            
        // 잘못된 데이터 예외 발생 시
        } catch (IllegalArgumentException e) {
            writer.println("<script>alert('the update has failed'); window.location='/menu/data/val.do?id="+dataVO.getId()+"'<script>");
       
        // 기타 예외 발생 시
        } catch (Exception e) {
            writer.println("<script>alert('the update has failed'); window.location='/menu/data/val.do?id="+dataVO.getId()+"'<script>");
        
        } finally {
            if(writer != null) {
            	writer.flush();
                writer.close();
            }
        }
    }

 

HTML 폼에서 전송된 데이터를 @ModelAttribute를 통해 컨트롤러 메서드의 매개변수로 받아올 수 있습니다.

이 경우 폼에서 전송되는 데이터는 자동으로 DataType 객체로 매핑됩니다.

  • @ModelAttribute는 HTML 폼에서 전송된 데이터를 객체에 매핑해줍니다.
  • @RequestBody는 JSON 데이터를 처리할 때 사용하고, 폼 데이터를 받는 경우에는 사용할 수 없습니다.

 

 

728x90
728x90