pakaju
40
2020-05-14 17:31:12
2
123

spring boot Requestparam 어노테이션에 대해서 질문있습니다.



 <script type="text/javascript">
function CheckForm(day) {
            var arr_Day = document.getElementsByName("요일"); // "요일"이라고 되어있는 이름의 값들을 arr_Day에 넣음
            for (var i = 0; i < arr_Day.length; i++) { // arr_Day라는 배열의 길이만큼 반복함
                if (arr_Day[i] != day) { // arr_Day[i]에 있는 값이 누른 값 즉, 해당 값과 같은지 비교하고 아니라면
                    arr_Day[i].checked = false; // arr_Day[i] 번째의 체크를 푼다.
                }
            }
            $.ajax({ // 해당 값을 데이터화 해서 서버로 데이터를 보냄.
                url : '/subjectSelectDay',
                type : 'get',
                datatype : 'text',
                data : {
                    ChooseDay : $('input:checkbox[name="요일"]:checked').val()
                }
            });
        }
</script>

<form th:action="@{/subjectSelectDay}" method="get"> <!-- action을 취할 때 해당 form 안에 있는 값을 가져옴. -->
    <input type="checkbox" value="월요일" name="요일" onclick="CheckForm(this)" id="monday">
    <label for="monday">월요일</label>
    <input type="checkbox" value="화요일" name="요일" onclick="CheckForm(this)" id="tuesday">
    <label for="tuesday">화요일</label>
    <input type="checkbox" value="수요일" name="요일" onclick="CheckForm(this)" id="wednesday">
    <label for="wednesday">수요일</label>
    <input type="checkbox" value="목요일" name="요일" onclick="CheckForm(this)" id="thursday">
    <label for="thursday">목요일</label>
    <input type="checkbox" value="금요일" name="요일" onclick="CheckForm(this)" id="friday">
    <label for="friday">금요일</label>

        <dl th:each="list : ${subjectList}">
            <span th:text="${list.subjectNm}"></span>
        </dl>
</form>

체크박스를 체크할 때 해당 요일의 값을 ajax로 가져와 Requestparam으로 받아 해당 요일을 매개변수로 url로 보내려고 합니다.

@GetMapping("/subjectSelectDay")
    public String selectDaySubject(@RequestParam(value = "ChooseDay", required = false) String day, HttpServletRequest request, Model model, ModelAndView modelAndView){
        HttpSession httpSession = request.getSession(false);
        UserVO userVO = (UserVO) httpSession.getAttribute("sessionUser");

        List<SubjectClass> subjectClassList = subjectServiceImp.subjectFindUserid(userVO.getUserid()); // 아이디에 스케쥴 값을 가져옴.
        System.out.println(day);

//        if (subjectClassList != null && subjectClassList.size() > 0){ // 해당 아이디에 스케쥴값이 있으면 진행 아니라면 다시 홈으로
//            List<SubjectClass> subjectClass = subjectServiceImp.subjectListFind(userVO.getUserid(), day); // 아이디와 해당 요일에 해당하는 스케쥴 값을 가져옴.
//
//            model.addAttribute("subjectList", subjectClass);
//            return "/subjectSelectDay";
//        }
//        else
//            return "/home";
        model.addAttribute("subjectList", subjectClassList);
        return "/subjectSelectDay";
    }

http://localhost:8080/subjectSelectDay?ChooseDay=%EC%9B%94%EC%9A%94%EC%9D%BC < 이렇게 url로 보이길 원하는데 체크박스로 요일의 값을 보내면 위의 url로 가는것이 아니라 http://localhost:8080/subjectSelectDay < 이렇게 고정이 되어있습니다. 근대 구글의 검사에 있는 Network를 보게되면 위의 url은 제대로 전송이 되고 있는데 제가 보고있는 View에서는 http:/localhost:8080/subjectSelectDay < 여기에 고정이 되어있습니다.

혹시 체크박스를 체크할 때마다 http://localhost:8080/subjectSelectDay?ChooseDay=%EC%9B%94%EC%9A%94%EC%9D%BC < 이렇게 url로 보내고싶습니다.

@Requestparam을 통해 해당 매개변수를 파라미터로 받아 사용해 위의 url로 가야하는데 왜 안가는건지 알고싶습니다..


0
0
  • 답변 2

  • 길수응
    117
    2020-05-14 20:55:17 작성 2020-05-14 20:57:52 수정됨
    ajax는 페이지를 이동하지 않고 데이터를 받아와서 일부분의 화면만 바꿀 때 씁니다

    당연히 url은 바뀌지 않는게 맞구요.

    먼저 질문자님은 jsp 페이지를 반환하는 메소드에 ajax를 쓰려고 하고 있어요

    ajax를 쓸 때는 메소드를 새로 만들어야 하고, 보통 Json 형식이나 기타 다른 필요한 형식으로 반환을 해줍니다. @Responsebody 등을 붙여서 객체 반환을 할 수 있던 걸로 아는데, 궁금하시면 찾아 보시면 될 것 같습니다.

    파라미터를 전송할때는 form 태그 안에 input 타입이나 textarea등 태그를 이용하여 name속성을 주어 전달을 할 수도 있고, url뒤에 ?와 &를 붙여서 파라미터를 전송해 주는 방법이 있어요.

    굳이 url을 넣고 싶으시다면
    script 추가 , form에 아이디 추가

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
          $(function(){
            $('#dayForm input').click(function(){
              var day = $(this).val();
              //url /subjectSelectDay부분은 알맞게 수정

              var url = '/subjectSelectDay?ChooseDay='+day;
              location.href = url;
               })
             })
    </script>
    <form id="dayForm" method="get">
     ...
    </form>

    이런식으로 코드를 바꾸시면 될 것 같아요.
    잘 안된다면 url 부분을 수정 해보세요.
    onclick=checkForm은 빼주시고.

    성급하게 하시지 말고, 기본 전송방식은 어떻게 이루어지는지, ajax는 어떻게, 어느때 쓰는건지 쓰는 이유는 뭔지 이런 개념부터 차근히 알아가시면 좋을 것 같네요.
    1
  • pakaju
    40
    2020-05-16 17:39:47

    자세한 정보 감사합니다!

    ajax를 알고나니 어떤방식으로 해야할지도 나오네요 ㅎㅎ 감사합니다!

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.