<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<title>회원가입</title>
</head>
<body>
<h2>회원 정보 입력</h2>
<form action="step3" method="post">
<p>
<label>이메일:<br>
<input type="text" name="email" id="email" value="${registerRequest.email }">
</label>
</p>
<p>
<label>이름:<br>
<input type="text" name="name" id="name" value="${registerRequest.name }">
</label>
</p>
<p>
<label>비밀번호:<br>
<input type="password" name="password" id="password">
</label>
</p>
<p>
<label>비밀번호 확인:<br>
<input type="password" name="comfirmPassword" id="confirmPassword">
</label>
</p>
<input type="submit" value= "가입완료">
</form>
</body>
</html>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ tahlib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<title>회원가입</title>
</head>
<body>
<h2>회원 정보 입력</h2>
<form:form action="step3" modelAttribute="registerRequest">
<p>
<label>이메일:<br>
<form:input path="email"/>
</label>
</p>
<p>
<label>이름:<br>
<form:input path="name"/>
</label>
</p>
<p>
<label>비밀번호:<br>
<form:input path="password"/>
</label>
</p>
<p>
<label>비밀번호 확인:<br>
<form:password path="confirmPassword"/>
</label>
</p>
<input type="submit" value= "가입완료">
</form:form>
</body>
</html>
위는 수정후.
<form:form> 태그는 HTML의 <form>태그를 생성.
위 태그의 action속성은 form태그의 action속성과 동일.
modelAttribute는 커맨드 객체의 속성이름 지정.
<form:input path="name" />는, 커맨드객체(registerRequest)의 name프로퍼티값을 value속성으로사용
즉, name프로퍼티값이 '스프링'일 경우, 해당 코드는
<input id="name" name="name" type="text" value="스프링"/>
마찬가지로, form:password도, password타입의 input태그를 생성하므로 value속성의 값을 빈 문자열로 설정
<form:form>태그엔 커맨드객체 존재가 필수. step1에서 step2로 넘어오면서 이름이 registerRequest인 객체를 모델에 넣어야 해당 태그가 정상작동. 따라서, handleStep2()메서드에 Model model,
model.addAttribute("registerRequest", new RegisterReqeust());코드가 필요
@RequestParam이나 커맨드 객체와 관련된 주요 익셉션
public String handlestep2(
@RequestParam(value="agree", defaultValue="false") Boolean agreeVal,
Model model) {
if(!agreeVal) return "register/step1";
model.addAttribute("registerRequest", new RegisterRequest());
return "register/step2";
에서,
public String handleStep2(
@RequestParam("agree") Boolean agreeVal, Model model) {...}
라 수정한 뒤, 약관 동의를 선택하지 않고 [다음 단계]를 누르면, agreeVal 파라미터를 전송하지 않는다.
checkbox타입의 <input>요소는 선택되지 않으면 파라미터로 아무 값도 전송하지 않는다.
agreeVal은 필수로 존재해야 하는데, 기본값(defaultValue)가 없는 것이다.
@RequestParam을 처리하는 데에 있어 필수인 'agree'파라미터가 존재하지 않는다는 익셉션이 발생한다.
step1.jsp의 <input>태그의 value속성을
<input type="checkbox" name="agree" value="true"> 약관 동의
에서 true를 true1로 변경하면, true1을 Boolean으로 변경할 수 없기에 에러가 발생한다.
마찬가지로, 커맨드 객체의 프로퍼티가 int일 때, 요청파라미터가 "abc"인 경우에도 int로의 변환이 불가능하므로, 에러가 발생한다.
이러한 에러를 찾는 logLevel낮추기는 pom.xml에
<dependency>
<groupId> org.slf4j</groupId>
<artifactId> slf4j-api</artifactId>
<version> 1.7.25</version>
</dependency>
<dependency>
<groupId> ch.qos.logback </groupId>
<artifactId> logback-classic</artifactId>
<version> 1.2.3</version>
</dependency>
의 추가를 통해 가능.
이후, src/main/resources에 logback.xml을 생성한 다음,
<logger name="org.springframework.web.servlet" level="DEBUG"/> 을 통해 가능
'동방프로젝트' 카테고리의 다른 글
jdbcTemplate 중복코드 제거 (2) | 2021.02.08 |
---|---|
Model을 통해 컨트롤러에서 뷰에 데이터 전달 (1) | 2021.01.31 |
spring의 transactional&proxy (2) | 2021.01.25 |
8과 queryForObject() (2) | 2021.01.23 |
7과-2 (0) | 2021.01.22 |