java - 获取选定的下拉列表(Thymeleaf)
问题描述
我创建了一个包含角色在内的一些信息的用户,我去获取一个预先选择的用户角色下拉列表进行修改。现在我可以修改它,但无法获取该用户的角色列表,在视图中,所有角色都存储在数据库中。
有人帮我解决这个问题,这是我获取角色列表的百里香代码:
<select id="role" name="role" class="user-form-control"
multiple="multiple">
<option th:each="role : ${roles}" th:value="${role.name}"
th:attr="choiceid=${role.name}" th:text="${role.name}">
</option>
</select>
我的控制器:
@RequestMapping(value = "/users/edit/{userId}", method = RequestMethod.POST)
public RedirectView modifyUser(@PathVariable String userId, @ModelAttribute(value = "user") UserDto userto,
Model model) {
Integer valueUserId;
try {
valueUserId = Integer.parseInt(userId);
} catch (NumberFormatException e) {
return new RedirectView("/error");
}
UserDto user = userProvider.getUserById(valueUserId);
String pass = user.getPassword();
BeanUtils.copyProperties(userto, user);
user.setIdUser(valueUserId);
user.setPassword(pass);
return userProvider.modifyUser(user) ? new RedirectView("/users") : new RedirectView("/error");
}
我的角色控制器:
@RequestMapping(value = "/roles", method = RequestMethod.GET)
public ModelAndView getRoles(Model modelUser){
UserDto user = userService.getLoggedUser();
List<String> userRoles = user.getRole();
ModelAndView model = new ModelAndView("role/roles");
}
modelUser.addAttribute("userRoles", userRoles);
List<RoleDto> roles =roleProvider.getRoles();
model.addObject("roles",roles);
model.addObject("userRoles", userRoles);
return model;
}
@RequestMapping(value = "/roles/edit/{roleId}", method = RequestMethod.GET)
public ModelAndView getRole(@PathVariable String roleId){
Integer valueRoleId;
try{
valueRoleId = Integer.parseInt(roleId);
}
catch (Exception e){
return new ModelAndView("error");
}
RoleDto role = roleProvider.getRoleById(valueRoleId);
ModelAndView model;
if (role == null){
model = new ModelAndView("error");
}
else{
model = new ModelAndView("role/rolemodify");
model.addObject("role",role);
model.addObject("path","/roles/edit/"+role.getIdRole());
}
return model;
}
解决方案
您的角色控制器看起来不错。您可以像这样编辑您的 modifyUser 方法以将您的角色添加到模板中:
@RequestMapping(value = "/users/edit/{userId}", method = RequestMethod.POST)
public RedirectView modifyUser(@PathVariable String userId, @ModelAttribute(value = "user") UserDto userto,
Model model) {
Integer valueUserId;
try {
valueUserId = Integer.parseInt(userId);
} catch (NumberFormatException e) {
return new RedirectView("/error");
}
//new code
List<RoleDto> roles = roleProvider.getRoles(); //maybe print these in a loop to verify it's getting the roles correctly from the database.
model.addAttributes("roles", roles);
UserDto user = userProvider.getUserById(valueUserId);
String pass = user.getPassword();
BeanUtils.copyProperties(userto, user);
user.setIdUser(valueUserId);
user.setPassword(pass);
return userProvider.modifyUser(user) ? new RedirectView("/users") : new RedirectView("/error");
}
您必须进入@Autowire
您roleProvider
的用户控制器。
确保您的RoleDto
班级有一个名称字段,并且 getter 是getName()
. 命名约定在春季很重要。
推荐阅读
- django - 如何正确本地化表单中的字段?
- python-3.x - Python 'for' 循环错误地将所有数据范围标记为一个标签
- javascript - React-Events:onMouseUp 在 onMouseEnter 事件后未触发
- python - 使用 OpenCV 和 Python 对图像进行白平衡
- reactjs - 如何使用使用 es6 的 node_modules 设置玩笑
- python - 如何在python中列出对象参数?
- javascript - 带有延迟视频自动播放的 Bootstrap 4 轮播
- javascript - 我怎样才能使这个幻灯片自动播放?
- c++ - BubbleSort 使用返回垃圾或 0 的向量
- swift - NSProgressIndicator 在应用程序启动期间未显示