DEVLOG

Controller 객체 구현 - 2 본문

Spring

Controller 객체 구현 - 2

BINTHEWORLD 2022. 6. 11. 18:12

@ModelAttribute 어노테이션

@ModelAttribute 어노테이션을 이용하면 커맨드 객체의 이름을 변경할 수 있고, 이렇게 변경된 이름view에서 커맨드 객체를 참조할 때 사용된다.

MemberController.java

커맨드 객체에 @ModelAttribute("mem") 어노테이션 사용하면 view에서 ${mem.~~~}으로 커맨드 객체에 접근 가능하다.

@Controller
@RequestMapping("/member") // 공통 매핑값
public class MemberController {
	@Resource(name="memService")
	MemberService service;
	
	@RequestMapping(value="/memJoin", method=RequestMethod.POST)
	// @ModelAttribute("mem") 어노테이션 : mem으로 member 객체에 접근할 수 있다. (Ex. ${mem.memId})
	public String memJoin(@ModelAttribute("mem") Member member) { // form 에서 입력한 값들이 Member.java의 setter()메소드로 셋팅됨
		 
		// Member.java의 getter()로 셋팅된 값을 들고온다.
		service.memberRegister(member.getMemId(), member.getMemPw(), member.getMemMail(), 
				member.getMemPhone1(), member.getMemPhone2(), member.getMemPhone3());
		
		return "memJoinOk";
	}
}

MemJoinOk.html

<body>
	<h1> memJoinOk </h1>
	ID : ${mem.memId}<br /> <!-- Member.java의 getter가 작용한다.-->
	PW : ${mem.memPw}<br />
	Mail : ${mem.memMail} <br />
	Phone : ${mem.memPhone1} <br />
	
	<a href="/lec17/resources/html/memJoin.html"> Go MemberJoin </a>
</body>

또한, @ModelAttribute 어노테이션이 사용되는 Controller에서 어떠한 메소드가 호출되든 항상 @ModelAttribute 어노테이션은 같이 호출된다.

커맨드 객체 프로퍼티 데이터 타입

데이터가 중첩 커맨드 객체를 이용한 List 구조인 경우, List 구조를 갖는 객체에 대해 또 하나의 커맨드 객체를 생성한다.

memJoin.html

	<form action="/lec19/member/memJoin" method="post">
		PHONE1 : <input type="text" name="memPhones[0].memPhone1" size="5"> -
				 <input type="text" name="memPhones[0].memPhone2" size="5"> -
				 <input type="text" name="memPhones[0].memPhone3" size="5"><br />
		PHONE2 : <input type="text" name="memPhones[1].memPhone1" size="5"> -
				 <input type="text" name="memPhones[1].memPhone2" size="5"> -
				 <input type="text" name="memPhones[1].memPhone3" size="5"><br />
	</form>

MemPhone.java

public class MemPhone {
	
	private String memPhone1;
	private String memPhone2;
	private String memPhone3;
	
	public String getMemPhone1() {
		return memPhone1;
	}
	public void setMemPhone1(String memPhone1) {
		this.memPhone1 = memPhone1;
	}
	public String getMemPhone2() {
		return memPhone2;
	}
	public void setMemPhone2(String memPhone2) {
		this.memPhone2 = memPhone2;
	}
	public String getMemPhone3() {
		return memPhone3;
	}
	public void setMemPhone3(String memPhone3) {
		this.memPhone3 = memPhone3;
	}
	
}

Member.java

List의 제네릭으로 새로 생성한 MemPhone 커맨드 객체를 선언해준다.

public class Member {
	private List<MemPhone> memPhones;
	
	public List<MemPhone> getMemPhones() {
		return memPhones;
	}
	public void setMemPhones(List<MemPhone> memPhones) {
		this.memPhones = memPhones;
	}
}

Model & ModelAndView 차이점

컨트롤러에서 뷰에 데이터를 전달하기 위해 사용되는 객체로 Model과 ModelAndView가 있다. 두 객체의 차이점은 Model은 뷰에 데이터만을 전달하기 위한 객체이고, ModelAndView데이터와 뷰의 이름을 함께 전달하는 객체이다.

MemberController.java

	/*
	@RequestMapping(value = "/memModify", method = RequestMethod.POST)
	public String memModify(Model model, Member member) { // 반환형 String 
		
		Member[] members = service.memberModify(member);
		
		model.addAttribute("memBef", members[0]); // view 파일에서 ${memBef.memId}로 접근
		model.addAttribute("memAft", members[1]);
		
		return "memModifyOk"; // 뷰 이름을 리턴
	}
	*/
	
	@RequestMapping(value = "/memModify", method = RequestMethod.POST)
	public ModelAndView memModify(Member member) { // 반환형 : ModelAndView
		
		Member[] members = service.memberModify(member); 
		
		ModelAndView mav = new ModelAndView(); // new 연산자를 이용해 ModelAndView 객체 생성
		mav.addObject("memBef", members[0]);
		mav.addObject("memAft", members[1]);
		
		mav.setViewName("memModifyOk"); // 뷰 이름 함께 전달
		
		return mav; // ModelAndView 객체를 리턴
	}

 

🙆‍♂️출처🙇‍♂️

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC_renew

 

자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌 - 인프런 | 강의

스프링 프레임워크 기본부터 실전 사용법까지! 충실하고 폭넓은 설명과 예제를 통해 현장에 바로 투입되어 활약하는 개발자로 거듭나세요., - 강의 소개 | 인프런...

www.inflearn.com

'Spring' 카테고리의 다른 글

리다이렉트, 인터셉터  (0) 2022.06.14
세션, 쿠키  (0) 2022.06.13
Controller 객체 구현 - 1  (0) 2022.06.11
Service & Dao 객체 구현  (0) 2022.06.10
웹 서버(Tomcat)와 이클립스 연동  (0) 2022.06.09
Comments