アンケートプラットフォームの実施(ユーザー)

9532 ワード

Intro.


22.2.24は最初のプロジェクトを完了しました.
多くの変数がありましたが、予想通りの結果が出てよかったです.
(実際には、それ自体ではなく、少し残念な点がありますが、ゆっくり修正しなければなりません)
そして一緒にプロジェクトをした人が私のコードを見て質問したことを思い出しました.
問題のポイントは「このコードがどのような役割を果たしているのか、なぜこのように書かれているのか」です.
当時の解釈は本当に不自然だった.
私が質問した人なら、私が何を言っているのか理解できないかもしれません.
△私があなたに聞いた理由は、私のコードを見て自分の問題を解決するためです.
書き終わってから本人が書いたコードも混同された.

こんなことは繰り返すわけにはいかない


どの方向から見ても問題は深刻だと思いますが、
プロジェクトで使用するコードを分析して記録することを決定します.
そしてこれからも記録します.
そうすると、コードを書く意図を詳しく覚えることができます.
私が書いていないコードでも素早く読むことができますよね?

(ユーザー、ホームページ)


ニックネーム登録機能の実装

  • のニックネームを入力すると、トルコアクティビティで入力したニックネームがDBに登録されます.
  • 機能
    	/* 닉네임 등록 */
    //	==/regist, method post 함수 역할==
    //			1. userNick에서 닉네임 입력 후 엔터를 누르면 
    //				1-1. 닉네임이 등록된다. 
    //					1-2. 첫 질문지 인덱스값을 조회한다.
    //						1-3. 그 값을(첫 질문지 인덱스값)을 /survey 주소로를 포함시켜 이동.
    	@Override
    	@RequestMapping(value = "/regist" , method = RequestMethod.POST)
    	public String registNick(UserDTO userDTO, MyAnswerDTO myAnswerDTO ,
        HttpServletRequest request, RedirectAttributes rAttr) throws Exception {
    		
    		session = request.getSession(); 
    		List<AdminAskDTO> askDTO = userService.selectAsk(); 
    		// 설문지의 첫 질문지의 ask_id 값을 조회하기 위해 사용
    >       // 근데 왜 list로 받아왔을까?
    		-> 내가 작성한 코드가 아니라 물어봤다.
            원래는 One으로 했는데, 웬만하면 list로 받는 게 좋다는 의견이 있어 list로 받았다고 했다.
            구체적으론, 나중에 수정 작업할 때 용이하게 하기 위해서라고 들었다.
    		  
    		List<AdminAnswerDTO> answerDTO = userService.selectAnswer();
    > 		// 사실 위에 건 없어도 되는 코드다.
    		-> 근데 사용하지 않은 코드가 있으면 어떤 문제가 발생하는 걸까?
           	  
    		 userService.registNick(userDTO);
             // 닉네임 등록하는 method
    		  
    		 userDTO.setUser_idx(userService.selectUser(userDTO));
             // 가장 최근에 등록한 usernick의 idx를 가져오는 selectUser 메서드를 이용해
             userDTO에 담아 userDTO.setUser_idx에 설정한다.
    		  
    		 log.info("UserDTO : " + userDTO); log.info("닉네임 등록 성공");
    		  
    		 session.setAttribute("nick", userDTO);
             // 등록한 닉네임의 user_idx를 기반으로 설문조사 답안을
             저장할 것이기 때문에 다른 기능에서도 사용할 수 있기 session에 설정한다.
    		 
    		return "redirect:/survey?ask_idx="+askDTO.get(0).getAsk_idx()+
            "&user_idx="+userDTO.getUser_idx();
            // 닉네임 등록 및 설정 후 설문지의 첫 질문지 페이지로 넘어가기 위해 return 값 설정
    		
    	}

    調査質問リストのインポート

  • のネット名を登録した後、アンケートに入ると、登録した質問用紙と答えがリストに表示されます.
    /* 설문조사 질문리스트 가져오기 */
    //	==/survey, method get 함수 역할==	
    //			1. /regist, method post 함수에서 받아온 파라미터를 확인한다.
    //			2. 받아온 파라미터로 질문지를 조회한다.
    //			3. 받아온 파라미터로 선택지를 조회한다.(1,2번과 동일한 파라미터)
    //			4. jsp 페이지에서 확인한다.
    	@Override
    	@RequestMapping(value = "/survey" , method = RequestMethod.GET)
    	public String surveyAskList(MyAnswerDTO myAnswerDTO, UserDTO userDTO, 
        AdminAskDTO askDTO, AdminAnswerDTO answerDTO, Model model,
        HttpServletRequest request) throws Exception {
    		
    		log.info("survey페이지 진입");
    		
    		session = request.getSession();
            //다른 기능에서도 사용하기 위해 session을 전역변수로 설정해두었다.
            이 session에 request.getSession()을 가져온다.
            
    		userDTO = (UserDTO) session.getAttribute("nick");
    >       //세션에 등록된 닉네임의 idx를 가져오기 위해 
    		session에 담은 nick을 userDTO에 담는다.
            -> 근데 왜 담을까?
            아래 userDTO.getUser_idx()에서 가져오기 위해 담는다.
    		
    		int nickIdx = userDTO.getUser_idx();
    		String userInfo = userDTO.getUser_nick();
            //userDTO에는 session에서 가져온 nick이 설정되어 있다.
            사용자가 선택한 답변을 저장하기 위해 userDTO에 담긴 정보들을 가져와
            변수로 지정해 준다.
            
    		int answerIdx = answerDTO.getAnswer_idx();
            // 선택한 답변의 idx값을 가지고 오기 위해 변수로 담았다.
    		
    		myAnswerDTO.setUser_nick(userInfo);
    		myAnswerDTO.setUser_idx(nickIdx);
    		myAnswerDTO.setAnswer_idx(answerIdx);
            // 변수에 담은 것들을 
           사용자가 선택한 답변을 저장하기 위해 myAnswerDTO에 담는다.
    		
    		List<AdminAskDTO> askListDTO = userService.askList(askDTO);
    		model.addAttribute("ask", askListDTO);	
    >       // 모델에 저장해준 "ask"는 jsp에서만 쓰인다.
    		
    		List<AdminAnswerDTO> answerListDTO = userService.answerList(answerDTO);
    		model.addAttribute("answer", answerListDTO);
    
    		return "/ezdiary/user/userSurvey";
    	}

    ajaxのProcessBarを使用して、「調査」ページに調査結果を表示

  • アンケートの回答を選択するたびに、アンケートの番号と内容が変更されます.
    Prograss Barを使用して、現在の問題番号を問題番号として表示し、進捗状況に応じて
    prograssbarでは、ボールの位置が左->右に変動します.
  • 	@Override
    	@ResponseBody
    	@RequestMapping(value = "/bar" , method = RequestMethod.POST)
    	public Map<String, Object> prograssBar(AdminAskDTO askDTO) throws Exception {
    		
            //해당 Contrller는 ajax에서 정보를 받아와 접근하는 방식으로 설정되어 있다.
    		System.out.println("Bar ajax 접근");
    		
    		Map<String, Object> result = new HashMap<String,Object>();
    		
    		result.put("ajaxAsk",userService.ajaxAsk(askDTO));
            //정보를 받을 jsp에 userService.ajaxAsk(askDTO)의 정보를 넘겨주기 위해서
            ajaxAsk로 설정하고 Map 타입으로 저장한다.
    		
    		return result;
            //result에 담긴 ajaxAsk 정보로 질문 번호와 bar의 위치가 변동한다.
            
    	}

    次の問題を取得(ajaxを使用)

  • 次の質問と質問に一致する答えを取得
  •  	  @Override
    	  @ResponseBody
    	  @RequestMapping(value = "/survey2" , method = RequestMethod.POST) 
    	  public Map<String, Object> testAjax(@RequestParam("ask_idx") int ask_idx, 
          AdminAnswerDTO answerDTO, AdminAskDTO askDTO)
    	  throws Exception {
          		
          System.out.println("ask_idx : "+ ask_idx);  
    	  //survey에서 넘어온 ask_idx를 확인
          
    	  System.out.println("ajax 컨트롤러 접근");
    	  
    	  Map<String, Object> result = new HashMap<String,Object>();
    	  
    	  result.put("ajaxAsk",userService.ajaxAsk(askDTO));
          // 현재 ask_idx보다 큰 다음 ask_idx를 가져온 후 result에 담는다
    	  result.put("ajaxAnswer",userService.ajaxAnswer(answerDTO));
    	  // 현재 ask_idx보다 큰 다음 ask_idx의 답변지를 가져온 후 result에 담는다.
          
    	  return result; 
          // ajax success시 처리를 위해
          위 정보들을 담은 result를 userSurvey.jsp에 반환한다.
    	  
    	  }

    ユーザーが選択した回答の確認

  • すべてのアンケートの回答が完了したら、ロード画面に入り、ロード完了後
    これはあなたが選んだ質問と答えです.
    言いたいことを入力できる入力ウィンドウとボタンが現れた.
    ここで、この方法は、問題紙とユーザが選択した答えを取得する機能を有する.
  • 	/* 하고싶은말 등록 페이지 */
    	@Override
    	@RequestMapping(value = "/msgPage" , method = RequestMethod.GET)
    	public String msgPage(MyAnswerDTO myAnswerDTO, Model model, 
        HttpServletRequest request) throws Exception {
    		
    		log.info("하고싶은말 등록 페이지 진입");
    		
    		session = request.getSession();
    		userDTO = (UserDTO)session.getAttribute("nick");
    		
    		int userIdx = userDTO.getUser_idx();
    		
    		myAnswerDTO.setUser_idx(userIdx);
            // userIdx을 기준으로 사용자가 선택한 답변을 가져오므로 
            myAnswerDTO에 userIdx를 설정한다.
    		
    > 		List<MyAnswerDTO> mySurveyList = userService.mySurveyList(myAnswerDTO);
    		//설정한 myAnswerDTO.setUser_idx로 mySurveyList의 쿼리를 실행해
            mySurveyList에 값(질문지 번호와 답변 번호와 내용들)을 받아온다.
    		model.addAttribute("mySurveyList", mySurveyList);
    		
    		int userCount = adminService.userTotalCount();
            //footer에 이 설문지를 완료한 사용자 수를 보여주기에 위해 작성
    		 model.addAttribute("userCount", userCount);
    		
    		
    		return "/ezdiary/user/userMsg";
    	}

    言いたいことは何でも言う

  • の言いたいことの文字枠に内容を記入し、データベース
  • に内容を挿入する.
    	@Override
    	@RequestMapping(value = "/msg" , method = RequestMethod.POST)
    	public String sendMsg(UserMsgDTO userMsgDTO , HttpServletRequest request) 
        throws Exception {
    		
    		log.info("userMsgDTO : " + userMsgDTO );
    		session = request.getSession();
    		userDTO = (UserDTO)session.getAttribute("nick");
    		
    		int userIdx = userDTO.getUser_idx();
    		String userNick = userDTO.getUser_nick();
    		
    //		System.out.println("메세지 작성 useridx : " + userIdx);
    		userMsgDTO.setUser_idx(userIdx);
    		userMsgDTO.setUser_nick(userNick);
    		
    		userService.sendMsg(userMsgDTO);
            
    		return "redirect:/result";
    	}