アンケートプラットフォームの実施(ユーザー)
9532 ワード
Intro.
22.2.24は最初のプロジェクトを完了しました.
多くの変数がありましたが、予想通りの結果が出てよかったです.
(実際には、それ自体ではなく、少し残念な点がありますが、ゆっくり修正しなければなりません)
そして一緒にプロジェクトをした人が私のコードを見て質問したことを思い出しました.
問題のポイントは「このコードがどのような役割を果たしているのか、なぜこのように書かれているのか」です.
当時の解釈は本当に不自然だった.
私が質問した人なら、私が何を言っているのか理解できないかもしれません.
△私があなたに聞いた理由は、私のコードを見て自分の問題を解決するためです.
書き終わってから本人が書いたコードも混同された.
こんなことは繰り返すわけにはいかない
どの方向から見ても問題は深刻だと思いますが、
プロジェクトで使用するコードを分析して記録することを決定します.
そしてこれからも記録します.
そうすると、コードを書く意図を詳しく覚えることができます.
私が書いていないコードでも素早く読むことができますよね?
(ユーザー、ホームページ)
ニックネーム登録機能の実装
/* 닉네임 등록 */
// ==/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";
}
Reference
この問題について(アンケートプラットフォームの実施(ユーザー)), 我々は、より多くの情報をここで見つけました https://velog.io/@900522z/설문조사형-플랫폼-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol