이는 front와 연결 짓기 위한 util파일이다.

간단히 설명하면, controller안에 있는 이름을 가져와서 javascript window.controllerName에 집어넣는다.

public class ControllerNameInterceptor extends HandlerInterceptorAdapter {

  @Override
  public void postHandle(HttpServletRequest request, @NonNull HttpServletResponse response,
      Object handler, ModelAndView modelAndView) throws Exception {
    super.postHandle(request, response, handler, modelAndView);

    String controllerName = "";
    String methodName = "";

    if (handler instanceof HandlerMethod) {
      HandlerMethod handlerMethod = (HandlerMethod) handler;
      controllerName = handlerMethod.getBeanType().getSimpleName().replace("Controller", "");
      methodName = handlerMethod.getMethod().getName();
    }

    String queryString = request.getQueryString() != null ? "?" + request.getQueryString() : "";
    request.setAttribute("queryString", queryString);
    request.setAttribute("controllerName", controllerName);
    request.setAttribute("methodName", methodName);
  }
}

위와 같이 util 폴더에 ControllerNameInterceptor.java파일을 만든다.

그 후 아래와 같이 front쪽 스크립트 필요한 곳에 넣어준다.

  • fragments/head.html : 이 파일은 모든 css 파일들을 모아둔 파일이다.
  <script th:inline="javascript">
    /*<![CDATA[*/
    window.contextRoot = /*[[ @{/} ]]*/'/';
    window.controllerName = /*[[ ${controllerName} ]]*/'';
    const numberFormatter = Intl.NumberFormat('en-US');
    /*]]>*/
  </script>

 

 

  • fragments/common-script.html : 이 파일은 모든 js 파일들을 모아둔 파일이다.
  <script th:inline="javascript">
    /*<![CDATA[*/

    var controllerName = /*[[ ${controllerName} ]]*/'';

    $(document).on('click', '.menu', function () {
      window.controllerName = $(this).data('menuname');
    });

    let nav = $('#nav');
    const nav_link = nav.children('a');

    nav_link.each(function (index, el) {
      if ($(el).data('menuname') === controllerName) {
        $(el).addClass('active');
      } else {
        $(el).removeClass('active');
      }
    })


  </script>

위의 코드와 같이 controllerName을 받아올 수 있다.

 

❗ 단, controller폴더 안 파일 이름 설정을 controllerName + Controller라고 정확하게 해줘야한다.

ex) HomeController라고 하면 controllerName은 Home이다! ❗

'Web > Spring' 카테고리의 다른 글

[ERROR] Pageable import  (0) 2021.08.02
[ERROR] Querydsl import  (0) 2021.08.02
[배경] Querydsl  (0) 2021.07.28
[배경] JPA  (0) 2021.07.27
[배경] Maven  (0) 2021.07.27

+ Recent posts