Spring Projcect/학습 관리 시스템 & 백오피스 구축

Chapter 13. 강좌 목록

계란💕 2022. 8. 23. 02:50

13.1 강좌 entity 및 repository 구성

 

  Ex)

    - course 패키지 아래 Course 클래스 만들기 

java
열기

 

    - CourseRepository 인터페이스

java
열기

 

    - AdminCourseController 

java
열기

 

 

 

13.2 강좌 기능 심플화 등록 및 심플화 목록 구현

  Ex)

    - 컨트롤러

java
열기

 

    - add 페이지를 만든다. (Cource 엔티티 클래스의 변수 이름을 보고 참고해야한다.)

html
열기

 

    - 코스 서비스 

java
열기

 

    - 이를 구현한 서비스 임플

java
열기

     

    - 컨트롤러

java
열기

 

 

    ==============================   오류   ==============================   

    

  - 오류: 강좌 등록하기 버튼을 누르면

  - 원인: add.html 페이지에서 <form method="post"> 라고 작성해야하는데 method 대신 action을 입력했다가  오류났다.

 

    -> 수정 후 정상 화면

 

  Ex) 강좌 목록 보여주기

 

     - 마이바티스로 리스트를 구성해야한다.

     - common param 만든다. 공통 속성

java
열기

 

    - 바뀐 MemberParam

java
열기

 

    - courseParam

java
열기

 

    - courseDto

java
열기

 

    - courseService

java
열기

 

    - 컨트롤러

      -> 자주 쓰이는 부분을 위해 베이스 컨트롤러도 만든다.

java
열기

 

     - 베이스

java
열기

 

    - AdminCourseCtrl   => (여기서 if문에 !를 빼먹었다가 오류가 났다. - TempleteInputExcp)

java
열기

 

    - AdminMemberCtrl도 변경 가능

java
열기

 

    - course 내부 list

html
열기

 

    - CourseServiceImpl

java
열기

 

    - 코스 매퍼 인터페이스 만들기

      -> 마이바티스의 매퍼 어노테이션 

      -> Mapper를 만들면 짝을 이루는 xml 파일이 존재해야한다.

java
열기

  

    cf) SQL문을 DML태그에 추가 - 동일한 쿼리를 여러 번 삽입 가능하다.

<include refid="selectListWhere"></include>

 

      - CouerserMapper.xml 파일

        -> 아래 쪽의 <SELECT...> 뒤에 슬래시를 잘못 붙였다가 에러가 났다.

html
열기

 

     - 임플 list() 메서드

java
열기

 

    - courseDto

java
열기

 

 

 =============================== 오류  ===============================

    

  - 오류: 다른 페이지는 잘 뜨는데 강좌 관리 페이지에서 SQL 예외가 발생한다. SQLSyntaxErrorException

  - 원인: xml 파일에서 테이블 이름 course로 바꿈. 그니고 가장 마지막의 <SELECT ...> 뒤에 슬래시가 들어가는 바람에 SQL문법 오류가 났다. ..오타 그만 내기!!

 

    Sol) xml 파일 (수정 후)

html
열기

  Note) 실행 결과 - 정상 실행

 

 

  ========================= 오류  ========================= 

  - 오류 :TemplateInputException

  - 원인: AdminCourseController에서 list() 메서드 if문에 '!'를 빼먹었다.

java
열기

    -> 수정 후, 정상 화면

 

 

 

13.3 강좌 상세 정보 등록 및 수정 구현 (1)

 

  Ex) 강좌 상세 정보 수정

    - 리스트에 강좌명 하이퍼링크 추가

    - 컨트롤러

java
열기

 

    - 서비스에 getById() 추가

java
열기

 

    - CourseServiceImpl - getById()

java
열기

 

    - of() 메서드

java
열기

 

    - 에러 페이지

      -> 방금 컨트롤러에서 model에 "massage"를 넣어서  변수를 이용 가능하다.

html
열기

  Note) 실행 결과 - 존재하지 않는 강좌 정보 페이지로 이동할 때

 

 

    - 컨트롤러 수정

<hide/>
@GetMapping(value = {"/admin/course/add.do" , "/admin/course/edit.do"})
public String add(Model model, HttpServletRequest request, CourseInput parameter){

    boolean editMode = request.getRequestURI().contains("/edit.do");
    CourseDto detail = new CourseDto();

    if(editMode){
        long id = parameter.getId();    // 데이터가 존재하는지 체크
        CourseDto existCourse = courseService.getById(id);

        if(existCourse == null){    // 수정할 데이터가 없는 경우 - 에러 처리
            model.addAttribute("message", "강좌 정보가 존재하지 않습니다.");
            return "common/error";
        }
        detail = existCourse;   // 널이 아닐 때 넣어준다.

    }
    model.addAttribute("editMode", editMode);
    model.addAttribute("detail", detail);
    return "admin/course/add";
}

 

    -  이렇게  @PostMapping에 value를 넣어야 둘다 처리 가능하다.

java
열기

  

    - 서비스 - set() 메서드

boolean set(CourseInput parameter);

  

    - 임플에 set() 구현

java
열기

  Note) 실행 결과 - 수정

    - 수정 후, 리스트로 이동한다.

 

 

  Ex)  강좌 등록

 

    - 컨트롤러 add()

java
열기

 

    - 강좌 add 페이지에 카테고리 옵션이 나오도록 한다.

html
열기

 

  Note) 실행 결과

 

 

 

  Ex) 수정한 카테고리 저장하기

 

    - categoryId에 대해서 값을 Course가 저장해야한다. Course에 멤버 추가

long categoryId;

 

    - 임플에 add()에 추가, set()에도 동일하게 추가한다.

java
열기

  Note) 실행 결과 - 업데이트 날짜가 뜬다.

 

 

 

13.4 강좌 상세 정보 등록 및 수정 구현 (2)

 

  Ex)

    - Category에 categoryId를 추가

    - add

html
열기

  Note) 실행 결과

    -  수정하기 누르고 다시 들어오면 저장한 값이 보인다.

    - 데이터베이스에  잘 들어간다.

 

 

 Ex) 할인 종료일


    - 임플 클래스에 날짜 형식 바꾸는 메서드 getLocalDate()추가

java
열기

 

    - set(), add() 에 둘다  추가해서 course에 넣는다.

LocalDate saleEndDt = getLocalDate(parameter.getSaleEndDtText());

 

  Note) 실행 결과 - 정상

 

 

 

13.5 강좌 전체 삭제 및 선택 삭제 구현

 

  Ex) 강좌선택 삭제 구현하기

    - 체크 박스 만들기

html
열기

 

    - 버튼 삭제 자바스크립트

javascript
열기

 

    - deleteForm에다 삭제한 정보를 채워서 course의 delete 적용시킨다.

html
열기

 

    - 컨트롤러에 삭제 구현

java
열기

 

    - courseService

java
열기

 

    - 임플에 del() 구현

java
열기

  Note) 실행 결과

    - 선택 삭제 누른 다음

 

 

  Ex) 전체 삭제 구현

    - 리스트에서 맨위 체크 박스에 selectAll이라는 이름을 준다. 

html
열기

 

  cf) .attr()과 .prop()의 차이는?

    - .attr(): HTML의 속성을 취급한다.

    - .prop(): JavaScript의 프로퍼티를 취급한다.

 

   - prop() 로 체크한다.

javascript
열기

  Note) 실행 결과

    - 맨 위 박스 누른 화면

    - 선택 삭제 누른 다음 화면 =>  10개가 삭제된다.

 

 

 

13.6 강좌 수정 화면 스마트에디터(SmartEditor) 기능 적용

 

  Ex) 스마트 에디터(SmartEditor)

    -  https://github.com/naver/smarteditor2/releases  접속하여 2-2.10.0 다운로드

 

    - 압축 해제하고 dist폴더를 static 하위로 이동시킨다.

 

    - http://naver.github.io/smarteditor2/user_guide/2_install/setting.html 사이트의 2.0 버전 설치 탭의 코드 참고

    -> 강좌 add  파일의 아래에 추가한다.

<script type="text/javascript" src="../se2/js/service/HuskyEZCreator.js" charset="utf-8"></script>

 

    - 위 사이트의 4번 탭을 참고해서 강의 add파일에 자바스크립트 내용을 추가한다. (res앞에 슬래시 꼭 붙인다! 안 붙이면 오류난다.)

javascript
열기

 

    - 시큐리티의 Configure() http.headers.frameOptions().sameOrigin()을 추가한다.

java
열기

 

  Note) 실행 결과

    - 다음과 같이 입력 수정