본문 바로가기
Java/Spring

[Spring] 컨트롤러에서 서비스로 Session값 넘기기

by 펜네임 2019. 11. 14.

어으 죽을 맛이다.ㅋㅋㅋㅋ

이것때문에 개고생함.

 

컨트롤러에서 서비스로 세션 값을 넘길 때,

세션값 가져오기를 컨트롤러 내에서 하면 안 된다.

가져오는 건 

 

 

DraftController.java (일부)


@Controller
@AllArgsConstructor
public class DraftController { 
	
	private DraftService service;
	HttpSession session;
	
	
	// 진행문서함 목록으로 접속 시 작동
	@GetMapping("/goingDraft")
	public String goingDraft(Model model) {
		
		// 세션이 존재할 때만
		if (session.getAttribute("userId") != null) {
			model.addAttribute("goingDraft", service.getList());
		}
		// 세션이 존재하지 않으면
		else {
			model.addAttribute("msg","로그인한 사용자만 이용할 수 있는 페이지입니다.");
			return "/login/LoginForm";
		}
		return "/goingDraft";
		
	}
	
	
	
	// 기안하기 창 - 부서목록 불러오기
	@GetMapping("/registDraft")
	public String registDraft(Model model) {
		
		if (session.getAttribute("userId") != null) {
			model.addAttribute("getDeptList", service.getDeptList());	// https://offbyone.tistory.com/368	
		}
		else {
			model.addAttribute("msg","로그인한 사용자만 이용할 수 있는 페이지입니다.");
			return "/login/LoginForm";
		}
		return "/registDraft";
	}
	
	
	
	// 기안하기 창 - ajax처리
	@RequestMapping(value="/ajaxRegistDraft", method=RequestMethod.POST)
	@ResponseBody // return결과를 json으로 만들어줌
	public List<EmployeeVO> ajaxRegistDraft(@RequestParam(value="deptName") String deptName) {
		
		List<EmployeeVO> vo = service.getNameList(deptName);
		return vo;
	}

	// 기안하기 창 - 기안작성하기
	// 폼의 input에 들어있는 name과 value 쌍으로 전송하는 게 post 방식
	
	@PostMapping("/registDraft")
	public String registDraft(DraftVO draft, RedirectAttributes rttr) {
		
		// 세션에서 유저id와 유저부서id 갖고오기 **하지 마셈**
		//int userId = (int)session.getAttribute("userId");
		//int userDeptId = (int)session.getAttribute("userDeptId");
		
		// draft 객체에 세션값 넣기 **하지 마셈**
		//draft.setD_dept(userId);
		//draft.setD_writer(userDeptId);
		
		// draft 넣어 service단 돌리기
		service.registDraft(draft);
		
		rttr.addFlashAttribute("d_id", draft.getD_id());
		
		return "redirect:/goingDraft";
	}

 

 

registDraft.jsp

<label class="col-form-label col-sm-1 text-sm-right" style = "font-weight: bold;">작성자</label>
<div class="col-sm-2">
    <input type="text" class="form-control" value="${sessionScope.userName}" readonly>	<!-- Login한 employee 이름 가져오게 바꽈줘야 함 -->
    <input type="hidden" name="d_writer" value="${sessionScope.userId}">
    <input type="hidden" name="d_dept" value="${sessionScope.userDeptId}">
</div>

 

이렇게 form 태그 내부 input에 hidden으로 값을 넘겨줘야 함.

봐주신 교수님은 아마 컨트롤러에서는 객체의 copy본을 만든 듯하다고 하심.

댓글