List<CourseDto> listAll();
@Override
public List<CourseDto> listAll() {
List<Course> courseList = courseRepository.findAll();
return CourseDto.of(courseList);
}
@GetMapping("/admin/takecourse/list.do")
public String list(Model model, TakeCourseParam parameter) {
parameter.init();
List<TakeCourseDto> list = takeCourseService.list(parameter);
long totalCount = 0;
if (list != null && list.size() > 0) {
totalCount = list.get(0).getTotalCount();
}
String queryString = parameter.getQueryString();
String pagerHtml = getPaperHtml(totalCount,parameter.getPageSize(), parameter.getPageIndex(), queryString);
model.addAttribute("list", list);
model.addAttribute("totalCount", totalCount);
model.addAttribute("pager", pagerHtml);
List<CourseDto> courseList = courseService.listAll();
model.addAttribute("courseList",courseList);
return "admin/takecourse/list";
}
long searchCourseId;
jquery 부분에
$('#searchCourseId').on('change', function () {
var id = $(this).val();
// 선택해줄때마다 주소를 courseId로 옮겨줌
location.href = '?searchCourseId=' + id;
})
class 이름이 buttons인 div태그 안에
<select id="searchCourseId">
<option value="">전체 강좌</option>
<option th:each="x : ${courseList}"
th:selected="${#strings.equals(param.searchCourseId, x.id)}"
th:value="${x.id}" th:text="${x.subject}">자바프로그래밍</option>
</select>
@GetMapping("/admin/takecourse/list.do")
public String list(Model model, TakeCourseParam parameter
, BindingResult bindingResult) {
parameter.init();
List<TakeCourseDto> list = takeCourseService.list(parameter);
long totalCount = 0;
if (list != null && list.size() > 0) {
totalCount = list.get(0).getTotalCount();
}
String queryString = parameter.getQueryString();
String pagerHtml = getPaperHtml(totalCount,parameter.getPageSize(), parameter.getPageIndex(), queryString);
model.addAttribute("list", list);
model.addAttribute("totalCount", totalCount);
model.addAttribute("pager", pagerHtml);
List<CourseDto> courseList = courseService.listAll();
model.addAttribute("courseList",courseList);
return "admin/takecourse/list";
}
<sql id="selectListWhere">
<if test="searchCourseId > 0">
AND c.id = #{searchCourseId}
</if>
</sql>
<select id="selectListCount"
parameterType="com.kdew.dewlms.course.model.CourseParam"
resultType="long">
SELECT count(*)
FROM take_course tc
JOIN course c ON tc.course_id = c.id
JOIN member m ON tc.user_id = m.user_id
WHERE 1=1
<include refid="selectListWhere"></include>
</select>
내용이 없으면 "내용이 없습니다." 출력하고 페이지 번호는 삭제됩니다.
<tr th:if="${#lists.size(list) < 1}">
<td colspan="8">
<p class="nothing">내용이 없습니다.</p>
</td>
</tr>
</tbody>
</table>
<div class="pager" th:if="${#lists.size(list) > 0}" th:utext="${pager}"></div>
enctype="multipart/form-data"
을 설정해줘야 함수정
<form id="submitForm" method="post" enctype="multipart/form-data">
추가
<tr>
<th>첨부 파일</th>
<td>
<input type="file" name="file">
</td>
</tr>
String getNewSaveFile(String basePath, String originalFilename) {
//
//
LocalDate now = LocalDate.now();
String[] dirs = {
String.format("%s/%d/", basePath,now.getYear()),
String.format("%s/%d/%02d/", basePath, now.getYear(),now.getMonthValue()),
String.format("%s/%d/%02d/%02d/", basePath, now.getYear(), now.getMonthValue(), now.getDayOfMonth())};
for(String dir : dirs) {
File file = new File(dir);
if (!file.isDirectory()) {
file.mkdir();
}
}
String fileExtension = "";
if (originalFilename != null) {
int dotPos = originalFilename.lastIndexOf("."); // .의 위치 가져오기
if (dotPos > -1) {
fileExtension = originalFilename.substring(dotPos + 1); // 파일 확장자 가져오기
}
}
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String newFilename = String.format("%s%s", dirs[2], uuid); // 확장자가 없는 경우 파일 이름
if (fileExtension.length() > 0) {
newFilename += "." + fileExtension; // 확장자가 있는 경우 파일 이름
}
return newFilename;
}
@PostMapping(value = {"/admin/course/add.do", "/admin/course/edit.do"})
public String addSubmit(Model model, HttpServletRequest request
, MultipartFile file
, CourseInput parameter) {
if (file != null) {
String originalFilename = file.getOriginalFilename();
String basePath = "D:/zerobase/springboot/dewlms/files";
String saveFilename = getNewSaveFile(basePath, originalFilename);
try {
File newfile = new File(saveFilename);
FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(newfile));
} catch (IOException e) {
log.info("############");
log.info(e.getMessage());
}
}
boolean editMode = request.getRequestURI().contains("/edit.do");
if(editMode) {
long id = parameter.getId();
CourseDto existCourse = courseService.getById(id); // 강좌 상세 정보 가져옴
if (existCourse == null) {
// 강좌 정보가 없으면 에러 처리
model.addAttribute("message", "강좌 정보가 존재하지 않습니다.");
return "common/error";
}
boolean result = courseService.set(parameter);
// id가 존재하면 화면에 수정할 수 있도록 보여줌
} else {
boolean result = courseService.add(parameter);
}
return "redirect:/admin/course/list.do";
}
addSubmit
부분에
String saveFilename = ""; // 파일 저장하기 위해서
parameter.setFilename(saveFilename);
String filename;
add에
.filename(parameter.getFilename())
set에
course.setFilename(parameter.getFilename());
String filename;
Edit Configurations
-> +
-> Tomcat Server
-> Local
-> 톰캣 위치 설정해주고 -> 맨 아래 Fix
버튼 클릭 -> dewlms-war exploded
클릭
스프링에서 허용하지 않는 경로이기 때문에 이미지가 나오지 않음.
그래서 스프링에서 허용해줘야 함!
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("favicon.ico", "files/**");
super.configure(web);
}
private String[] getNewSaveFile(String baseLocalPath, String baseUrlPath, String originalFilename) {
//
//
LocalDate now = LocalDate.now();
String[] dirs = {
String.format("%s/%d/", baseLocalPath,now.getYear()),
String.format("%s/%d/%02d/", baseLocalPath, now.getYear(),now.getMonthValue()),
String.format("%s/%d/%02d/%02d/", baseLocalPath, now.getYear(), now.getMonthValue(), now.getDayOfMonth())};
String urlDir = String.format("%s/%d/%02d/%02d/", baseUrlPath, now.getYear(), now.getMonthValue(), now.getDayOfMonth());
for(String dir : dirs) {
File file = new File(dir);
if (!file.isDirectory()) {
file.mkdir();
}
}
String fileExtension = "";
if (originalFilename != null) {
int dotPos = originalFilename.lastIndexOf("."); // .의 위치 가져오기
if (dotPos > -1) {
fileExtension = originalFilename.substring(dotPos + 1); // 파일 확장자 가져오기
}
}
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String newFilename = String.format("%s%s", dirs[2], uuid); // 확장자가 없는 경우 파일 이름
String newUrlFilename = String.format("%s%s", urlDir, uuid);
if (fileExtension.length() > 0) {
newFilename += "." + fileExtension; // 확장자가 있는 경우 파일 이름
newUrlFilename += "." + fileExtension;
}
return new String[]{newFilename, newUrlFilename};
}
@PostMapping(value = {"/admin/course/add.do", "/admin/course/edit.do"})
public String addSubmit(Model model, HttpServletRequest request
, MultipartFile file
, CourseInput parameter) {
String saveFilename = ""; // 파일 저장하기 위해서
String urlFilename = "";
if (file != null) {
String originalFilename = file.getOriginalFilename();
String baseLocalPath = "D:/zerobase/springboot/dewlms/files";
String baseUrlPath = "/files";
String[] arrFilename = getNewSaveFile(baseLocalPath, baseUrlPath, originalFilename);
saveFilename = arrFilename[0];
urlFilename = arrFilename[1];
try {
File newfile = new File(saveFilename);
FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(newfile));
} catch (IOException e) {
log.info("############");
log.info(e.getMessage());
}
}
parameter.setFilename(saveFilename);
parameter.setUrlFilename(urlFilename);
boolean editMode = request.getRequestURI().contains("/edit.do");
if(editMode) {
long id = parameter.getId();
CourseDto existCourse = courseService.getById(id); // 강좌 상세 정보 가져옴
if (existCourse == null) {
// 강좌 정보가 없으면 에러 처리
model.addAttribute("message", "강좌 정보가 존재하지 않습니다.");
return "common/error";
}
boolean result = courseService.set(parameter);
// id가 존재하면 화면에 수정할 수 있도록 보여줌
} else {
boolean result = courseService.add(parameter);
}
return "redirect:/admin/course/list.do";
}
set에
course.setUrlFilename(parameter.getUrlFilename());
add에
.urlFilename(parameter.getUrlFilename())
String urlFilename;
String filename;
String urlFilename;
.filename(course.getFilename())
.urlFilename(course.getUrlFilename())
String urlFilename;
<div>
<img th:src="${detail.urlFilename}">
</div>