으아아아악33
248
2021-06-07 15:05:39
11
736

jstl <c:if test> 질문


지금 상황이 퇴사여부 라디오 체크버튼이 N일경우  퇴사날짜를 지정하는 달력이보이지않는 상태입니다,

만약에 Y를 체크할경우 퇴사날짜를 지정하는 달력을 보이게 하고싶은데.. <c if> 문을 써서 어떻게 조건을 걸어줘야 할까요...? 도움부탁드립니다! 


0
  • 답변 11

  • 두한백
    367
    2021-06-07 15:29:24

    꼭 jstl로 해야하는 이유가 있나요?

    글 내용으로 보면 체크를 했을 경우의 액션을 말씀하시는거 같은데,

    자바스크립트의 클릭 이벤트로 처리하는게 맞지 않나 싶습니다.


    만약 이미 체크값이 DB에 저장이 되어 컨트롤러에서 memberOne 오브젝트에 담겨있는 경우라면

    memberOne.quitYN 유무로 판별이 되겠네요.

    <c:if test="${memberOne.quitYN  eq 'Y'}">

    </c:if>



  • 으아아아악33
    248
    2021-06-07 15:34:08

    담겨있는 부분인데  되질않습니다.. ㅠㅠ

  • 어느덧
    415
    2021-06-07 15:39:10

    라디오에 Y,N 모두 checked 되어있는것도 이상하고;

    클릭 이벤트는 올려주신 소스내에는 보이지 않는데요.

    퇴사여부 클릭시라면 $("#input[name=quitYn]").on("click", function(){})

    구문을 찾아보셔야 할 것 같은데요.


    그리고 잘 작동하던거라면 크롬 디버깅창(F12) 열어서  스크립트 콘솔 에러 나는것도 확인해보시구요.

  • 성능최적화계획
    855
    2021-06-07 15:39:36 작성 2021-06-07 15:40:43 수정됨

    body 태그 부분은 웹화면이 뿌려질때 호출되고 끝입니다.

    사용자의 액션에 따라 이벤트는 스크립트 부분으로 빼서 작성하셔야 겠네요


    구글서 jsp 호출 순서 등 참고하시면 좋을거 같습니다.

  • 두한백
    367
    2021-06-07 15:41:10 작성 2021-06-07 15:43:20 수정됨

    우선 memberOne.quitYN 이라는 변수가 담겨있는지 확인해보세요.

    DB에 해당 필드가 있고 저장이 되어있는지, 

    memberOne이라는 객체에 멤버 변수가 선언이 되어있는지

    또는 SQL 쿼리에서 해당 필드를 select 하고 있는지


    컨트롤러 자바에서 로그, system.out, 디버깅 등으로 찍어보시고 jsp 파일에서 나오는지 확인해보시고

    조건문의 정보가 정확히 맞는지 확인해보시구요.


    제 생각에 컨트롤러나 DB에서 정확하게 읽은게 맞다면 논리적인 다른 오류일 수도 있어요.

    quitYN 이 Y인데 quitDate가 null값인지 null값이 아닌 다른 경우의 수가 있는지....등등



    근데 제가 보기에는 DB나 컨트롤러에서 선언이 이미 되어있는게 아니라

    클릭을 했을때의 이벤트인 경우 같거든요.. 그게 맞다면 스크립트 부분을 쓰는게 맞아요.

  • 으아아아악33
    248
    2021-06-07 15:50:14

    해보고 있는데 잘 되질 않네요.. 제가 자바스크립트 지식이 부족한가봅니다

    답변 감사드립니다

  • 제리뿅
    131
    2021-06-07 15:55:19

    jstl은 컨트롤러로부터 받아온 값을 사용하기위해 쓰는건데

    라디오 버튼을 이용해 N에서 Y로 클릭 이벤트를 발생시키면 컨트롤러로부터 받아온 값이 Y로 바뀐다고 생각하시나요?

    라디오 버튼에 이벤트가 일어났을 때 해당 라디오의 value를 가져와 display:none같은 처리를 해주시면 될거 같네요

  • 상저씨
    830
    2021-06-07 16:04:39

    // change or click Event Listener

    $('input[type="radio"]').on('change',function(){

       var value = this.value  

       if(value == "Y"){

         // DatePicker 띄우기

      }

    })


    하시면 될것같습니다~

  • 으아아아악33
    248
    2021-06-07 16:26:12

    자바스크립트로 했는데 문법이 잘못된거 같은데 잘 모르겠어요 .. 콘솔 로그랑 얼럿창은 정상으로 출력됩

    니다..


    .

  • 어느덧
    415
    2021-06-07 16:46:13

    일단 radio 에 checked attrbuite 부터 제거하세요.


    해당 창에서 콘솔창 열어서
    $("#memberOne.quitDate').show(); 입력해서 창 열리는지 확인부터 해보시는거 추천드립니다.

    올려주신 소스만으로 보면

    $("#memberOne.quitDate').show();  가 아니라 $("#quitDate').show();  가 되야 열릴것 같지만요.

  • 상저씨
    830
    2021-06-07 16:55:20

    jquery의 선택자는 id, class등등 잡는방법이 여러갠데 id로 잡으셔야할 것같아요


    지금 질문자님이 JSP, jstl, javscript(jquery)의 용법을 정확히 이해하지 않은 상태에서 코딩하고계시느라 헷갈리고 계신것 같아요.


    ${memberOne.quitDate} 는 서버에서 넘겨온 데이터를 JSTL로 value에 셋팅해준것뿐이지 DOM이 로드 된 이후에 javascript로는 memberOne.quitDate에 접근할 수 없습니다.


    그래서 원하는 인풋태그에 선언해주신 name, id 같은 attribute로 DOM객체를 선택하여 원하는 이벤트를 걸어주셔야합니다.

    bootstrap datepicker 를 사용하신다면

    $('#quitDate').datepicker('show'); 와 같이 id로 선택하여 이벤트 바인딩 해주시면 됩니다

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