Restful) Spring form tag를 이용하여 PUT,DELETE 사용하기
class UserController
@RequestMapping("{uid}/form")
public String updateForm(@PathVariable("uid") String userId, Model model, HttpSession session){
if(userId ==null){
throw new IllegalArgumentException("사용자 아이디가 필요합니다.");
}
User temp =(User)session.getAttribute("user");
if(temp==null){
throw new NullPointerException();
}
User user1=new User();
user1.setUserId(userId);
if(!user1.matchUserId(temp.getUserId())){
throw new NullPointerException();
}
User user =userDao.findById(userId);
model.addAttribute("user", user);
return "users/form";
}
@RequestMapping(value="", method=RequestMethod.PUT)
public String update(@Valid User user, Model model, BindingResult bindingResult , HttpSession session){
logger.debug("User : {} " , user);
if(bindingResult.hasErrors()){
logger.debug("Binding Result has error!");
List<ObjectError> errors=bindingResult.getAllErrors();
for(ObjectError error : errors){
logger.debug("error : {}, {}", error.getCode(), error.getDefaultMessage());
}
model.addAttribute("user", user);
return "users/form";
}
User temp =(User)session.getAttribute("user");
if(temp==null){
throw new NullPointerException();
}
if(!user.matchUserId(temp.getUserId())){
throw new NullPointerException();
}
userDao.update(user);
logger.debug("Database : {} " , userDao.findById(user.getUserId()));
return "redirect:/";
}
web.xml
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<servlet-name>appServlet</servlet-name>
</filter-mapping>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
class User
public boolean matchUserId(String userId2) {
return this.userId.equals(userId2);
}
class UserDao
public void update(User user) {
String sql =" update USERS set password = ? , name=?, email=? where userId=? ";
getJdbcTemplate().update(sql, user.getPassword(), user.getName(), user.getEmail(), user.getUserId());
}
form.jsp
<form:form name="question" method="${method}" action="/users" modelAttribute="user">
<div class="form-group">
<label for="userId">사용자 아이디</label>
<c:choose>
<c:when test="${ empty user.userId }">
<form:input path="userId" cssClass="form-control" name="userId"/>
<form:errors path="userId" />
</c:when>
<c:otherwise>
<p>${user.userId }</p>
<form:hidden path="userId" value="${user.userId }" />
</c:otherwise>
</c:choose>
</div>
<div class="form-group">
<label for="password">비밀번호</label>
<!-- <input type="password" class="form-control" id="password" name="password" placeholder="Password"> -->
<form:password path="password" cssClass="form-control" name="password"/>
<form:errors path="password" />
</div>
<div class="form-group">
<label for="name">이름</label>
<!-- <input class="form-control" id="name" name="name" placeholder="Name"> -->
<form:input path="name" cssClass="form-control" name="name"/>
<form:errors path="name" />
</div>
<div class="form-group">
<label for="email">이메일</label>
<!-- <input type="email" class="form-control" id="email" name="email" placeholder="Email"> -->
<form:input path="email" cssClass="form-control" name="email"/>
<form:errors path="email" />
</div>
<c:choose>
<c:when test="${ empty user.userId }">
<button type="submit" class="btn btn-success clearfix pull-right">회원가입</button>
</c:when>
<c:otherwise>
<button type="submit" class="btn btn-success clearfix pull-right">정보수정</button>
</c:otherwise>
</c:choose>
<div class="clearfix" ></div>
</form:form>
댓글 ( 4)
댓글 남기기