[싱글이의 영수증] 신고하기
업데이트:
싱글이의 영수증 신고하기
신고 버튼을 클릭할 경우 신고페이지 화면이 팝업창으로 열린다.
- 출력화면
신고버튼을 클릭하면 새 창이 열리게하는 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("&", "&");
result = result.replaceAll("<", "<");
result = result.replaceAll(">", ">");
result = result.replaceAll("\"", """);
}
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("&", "&");
result = result.replaceAll("<", "<");
result = result.replaceAll(">", ">");
result = result.replaceAll("\"", """);
}
return result;
}
공유하기
Twitter Google+ LinkedIn
댓글남기기