[싱글이의 영수증] 신고하기

업데이트:

싱글이의 영수증 신고하기

신고 버튼을 클릭할 경우 신고페이지 화면이 팝업창으로 열린다.

  • 출력화면

image



신고버튼을 클릭하면 새 창이 열리게하는 script

$(".report").on("click", function(){
    window.name = "parentWindow";
    window.open('${contextPath}/review/reviewReport/${review.boardNo}', "popup", "width=550, height=650, toolbars=no, scrollbars=no, menubar=no left=1000 top=200");
    });



신고 페이지 연결 Controller

@RequestMapping("reviewReport/{boardNo}")
public String boardReport(@PathVariable int boardNo, Model model) {
    model.addAttribute("boardNo", boardNo);
    return "review/reviewReport";
}



CSS

<style>
	    .maincolor{
        color: #ffffff !important; 
        background-color:#ffaf18 !important;
        border: 1px solid #ffaf18 !important;
    }
    .maincolor:hover{
        color: #ffffff !important; 
        background-color:#ff8500 !important;
        border: 1px solid #ffc823 !important;
    }

    /* 버튼 반대로 : 흰 바탕, 주황 테두리 */
    .maincolor-re{
            color: #ff8500 !important;
            background-color: #ffffff !important;
            border: 1px solid #ffaf18 !important;
    }
    .maincolor-re:hover{
        color: #ffffff !important; 
        background-color:#ff8500 !important;
        border: 1px solid #ffc823 !important;
    }
</style>



JSP

<c:if test="${swalIcon == 'success' }">
	<script>
		swal({icon : "${swalIcon}",
		 title : "${swalTitle}",
		 text : "${swalText}"}).then(function(){close()});
	</script>
</c:if>
<c:if test="${swalIcon == 'error' }">
	<script>
		swal({icon : "${swalIcon}",
		 title : "${swalTitle}",
		 text : "${swalText}"});
	</script>
</c:if>


<div class="container my-5" style="padding-left: 40px; padding-right: 40px;">
     <form method="POST" action="../reviewReportAction" class="needs-validation" name="report">
     <input type="hidden" value="${boardNo}" name="boardNo">
     <div class="form-group row">
      <label for="recipient-name" class="col-sm-3 col-form-label">신고 제목</label>
       <div class="col-sm-9">
             <input type="text" class="form-control" id="recipient-name" name="reportTitle" placeholder="신고 제목을 입력해 주세요." autocomplete="off" required>
          </div>
     </div>

         <div class="form-group row">
             <label class="input-group-addon col-sm-3 insert-label">신고 사유</label>
             <div class="col-sm-9">
             <select class="form-control div small" id="category" name="categoryCode" required>
                 <option value="1">욕설, 비방, 차별, 혐오</option>
                 <option value="2">홍보, 영리목적</option>
                 <option value="3">불법 정보</option>
                 <option value="4">음란, 청소년 유해</option>
                 <option value="5">개인 정보 노출, 유포, 거래</option>
                 <option value="6">도배, 스팸</option>
                 <option value="7">기타</option>
             </select>
             </div>
         </div>

         <div class="form-group row">
             <label for="content" class="col-sm-3 col-form-label">신고 내용</label>
             <div class="col-sm-9">
        
             <textarea class="form-control" id="reportContent" name="reportContent" rows="10" style="resize: none;" required></textarea>
             </div>
         </div>
         <div class="form-group row">
               <div class="col-sm-12" style="text-align:center; margin-top:30px;">
                <button type="submit" class="btn maincolor" id="reportBtn">신고</button>
                <button class="btn  maincolor-re" onclick="self.close();">취소</button>
             </div>
         </div>
     </form>
    </div>



신고 등록 Controller

@RequestMapping("reviewReportAction")
public String insertReviewReport(@ModelAttribute("report") ReviewReport reply , @RequestParam("boardNo") int boardNo,
                                @ModelAttribute(name="loginMember", binding=false) Member loginMember, HttpServletRequest request, RedirectAttributes ra) {
    
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("memberNo", loginMember.getMemberNo());
    map.put("boardNo", boardNo);
    map.put("reportTitle", reply.getReportTitle());
    map.put("reportContent", reply.getReportContent());
    map.put("categoryCode", reply.getCategoryCode());
    
    int result = service.insertReviewReport(map);

    String url = "redirect:" + request.getHeader("referer");
    
    if (result > 0) {
        swalIcon = "success";
        swalTitle = "신고가 접수되었습니다.";
    } else {
        swalIcon = "error";
        swalTitle = "신고 접수 실패";
    }
    
    ra.addFlashAttribute("swalIcon", swalIcon);
    ra.addFlashAttribute("swalTitle", swalTitle);
    
    return url;
}



  • 신고하기

Service

int insertReviewReport(Map<String, Object> map);

ServiceImpl

@Transactional(rollbackFor = Exception.class)
@Override
public int insertReviewReport(Map<String, Object> map) {
    
    int result = 0;
    
    int reportNo = dao.selectReportNo();
    
    if(reportNo>0) {
        
        map.put("reportNo", reportNo);
        
        String reportTitle = (String)map.get("reportTitle");
        String reportContent = (String)map.get("reportContent");
        
        reportTitle = replaceParameter(reportTitle);
        reportContent = replaceParameter(reportContent);
        
        map.put("reportTitle", reportTitle);
        map.put("reportContent", reportContent);			
    }
    
    result = dao.insertReviewReport(map);
    if(result > 0) {
        
        result = reportNo;
    }
    
    return result;
}


    // 크로스 사이트 스크립트 방지 처리 메소드
    private String replaceParameter(String param) {
        String result = param;
        if(param != null) {
            result = result.replaceAll("&", "&amp;");
            result = result.replaceAll("<", "&lt;");
            result = result.replaceAll(">", "&gt;");
            result = result.replaceAll("\"", "&quot;");
        }
            
        return result;
    }	
  • 신고 번호 얻어오기

DAO

public int selectReportNo() {
    return sqlSession.selectOne("reviewMapper.selectReportNo");
}

Mapper

<select id="selectReportNo" resultType="_int">
    SELECT SEQ_RNO.NEXTVAL FROM DUAL
</select>
  • 신고 둥록

DAO

public int insertReviewReport(Map<String, Object> map) {
    return sqlSession.insert("reviewMapper.insertReviewReport",map);
}	

Mapper

<insert id="insertReviewReport" parameterType="map">
    INSERT INTO REPORT_BOARD
    VALUES (#{reportNo}, #{reportTitle}, #{reportContent}, 
    #{memberNo}, #{categoryCode}, #{boardNo})
</insert>



크로스 사이트 스크립트 방지 메소드

private String replaceParameter(String param) {
    String result = param;
    if(param != null) {
        result = result.replaceAll("&", "&amp;");
        result = result.replaceAll("<", "&lt;");
        result = result.replaceAll(">", "&gt;");
        result = result.replaceAll("\"", "&quot;");
    }
        
    return result;
}	



댓글남기기