package org.xmx0632.deliciousfruit.web.account;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.xmx0632.deliciousfruit.entity.User;
import org.xmx0632.deliciousfruit.service.account.UserService;
/**
* 管理员管理用户的Controller.
*
* @author calvin
*/
@Controller
@RequestMapping(value = "/account/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.GET)
public String list(Model model) {
List<User> users = userService.getAllUser();
model.addAttribute("users", users);
return "account/userList";
}
@RequestMapping(value = "update/{id}", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Long id, Model model) {
model.addAttribute("user", userService.getUser(id));
return "account/userForm";
}
@RequestMapping(value = "update", method = RequestMethod.POST)
public String update(@Valid @ModelAttribute("preloadUser") User user,
RedirectAttributes redirectAttributes) {
userService.updateUser(user);
redirectAttributes.addFlashAttribute("message",
"更新用户" + user.getLoginName() + "成功");
return "redirect:/account/user";
}
@RequestMapping(value = "delete/{id}")
public String delete(@PathVariable("id") Long id,
RedirectAttributes redirectAttributes) {
User user = userService.getUser(id);
userService.deleteUser(id);
redirectAttributes.addFlashAttribute("message",
"删除用户" + user.getLoginName() + "成功");
return "redirect:/account/user";
}
/**
* 使用@ModelAttribute, 实现Struts2
* Preparable二次部分绑定的效果,先根据form的id从数据库查出User对象,再把Form提交的内容绑定到该对象上。
* 因为仅update()方法的form中有id属性,因此本方法在该方法中执行.
*/
@ModelAttribute("preloadUser")
public User getUser(@RequestParam(value = "id", required = false) Long id) {
if (id != null) {
return userService.getUser(id);
}
return null;
}
}