우선 글쓰기를 눌렀을 때 어느 게시판에서 작성하는 것인지를 알기 위해, board controller를 수정한다.
@GetMapping("/board/main")
public String main(@RequestParam("board_info_idx") int board_info_idx, Model model) {
model.addAttribute("board_info_idx",board_info_idx);
return "board/main";
}
그 후 board의 main.jsp를 수정한다.
<a href="${root }board/create?board_info_idx=${board_info_idx}" class="btn btn-primary">글쓰기</a>
그럼 이제 어느 게시판에서 글을 쓰는지가 board_info_idx를 통해 전달된다.
주소창을 통해 정보가 전달됨을 알 수 있다.
이제 글을 작성하는 form을 수정하자.
create.jsp의 form 태그 부분을 jstl의 form태그로 수정한다.
<form:form action='${root }board/create_pro' method="post" modelAttribute="createContentBean">
<div class="form-group">
<form:label path="content_subject">제목</form:label>
<form:input path="content_subject" class="form-control"/>
<form:errors path='content_subject' style='color:red' />
</div>
<div class="form-group">
<form:label path="content_text">내용</form:label>
<form:textarea path="content_text" class="form-control" rows="10" style="resize:none"/>
<form:errors path='content_text' style='color:red' />
</div>
<div class="form-group">
<form:label path="content_file">첨부 이미지</form:label>
<form:input type='file' path="content_file" class="form-control" accept="image/*" />
</div>
<div class="form-group">
<div class="text-right">
<form:button class="btn btn-primary">작성하기</form:button>
</div>
</div>
</form:form>
글 제목과 내용을 쓰지 않으면 오류가 뜨도록 ContentBean에 유효성 검사 태그를 넣는다.
@NotBlank
private String content_subject;
@NotBlank
private String content_text;
에러메세지 출력을 위해 error_message.properties 에 코드를 추가하자.
NotBlank.createContentBean.content_subject = 제목을 입력해주세요.
NotBlank.createContentBean.content_text = 내용을 입력해주세요.
controller까지 수정하자.
@GetMapping("/board/create")
public String create(@ModelAttribute("createContentBean") ContentBean createContentBean) {
return "board/create";
}
@PostMapping("/board/create_pro")
public String create_pro(@Valid @ModelAttribute("createContentBean") ContentBean createContentBean, BindingResult result) {
if(result.hasErrors()) {
System.out.println(result.getAllErrors());
return "board/create";
}
return "board/create_success";
}
일단은 글이 저장되진 않지만 글을 작성해서 요청하는 부분까지는 완료했다.
희대의 개뻘짓.
글을 작성하고나서 글쓰기를 눌러도 계속 null값이 전달되어서 세시간동안 오류를 잡으려 개고생을했는데 알고보니
enctype을 multipart/form으로 설정하면 오류가 뜬다고 한다.
<form:form action='${root }board/create_pro' method="post" modelAttribute="createContentBean" enctype="multipart/form-data">
<form:form action='${root }board/create_pro' method="post" modelAttribute="createContentBean">
하지만 파일을 전송하기위해 enctype을 지정해야 하므로, 다른 방식으로 해결하자.
ServletAppContext파일에 아래 코드를 추가해주자.
@Bean
public StandardServletMultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
그후 SpringConfigClass에 아래코드를 추가하자.
중간에 MultipartConfigElement는 네 개의 매개변수를 받는다.
첫번째 매개변수는 클라이언트가 보낸 파일 데이터의 경로를 지정하는 것인데 null로 설정하면 tomcat에서 설정한 임시 폴더로 지정된다.
두번째는 업로드 파일의 최대 크기로 50mb로 했다.
세번쨰는 전체 요청정보의 크기인데 500mb로 지정했는데 좀 큰 감이 있다.
마지막은 임시파일을 만드는 기준으로, 0으로 지정하면 알아서 지정해서 저장한다.
@Override
protected void customizeRegistration(Dynamic registration) {
super.customizeRegistration(registration);
MultipartConfigElement config1 = new MultipartConfigElement(null, 52428800, 524288000, 0);
registration.setMultipartConfig(config1);
}
이제 ContentBean에 매개변수를 추가한다. multipartFile형으로 선언해서 파일을 저장하게 된다.
create의 form태그의 path를 upload_file로 변경한다.
private MultipartFile upload_file;
'프로젝트 > 게시판미니프로젝트' 카테고리의 다른 글
[프로젝트] 게시판 글 읽는 페이지 구현 (0) | 2020.05.12 |
---|---|
[프로젝트] 게시판 글 목록 구현 (0) | 2020.05.12 |
[프로젝트] 회원 정보 수정 (0) | 2020.05.08 |
[프로젝트] 상단 메뉴 처리, 및 로그아웃 (0) | 2020.05.08 |
[프로젝트] 로그인 처리 (0) | 2020.05.08 |