【问题标题】:Get selected Dropdown list (Thymeleaf)获取选定的下拉列表(Thymeleaf)
【发布时间】:2018-10-10 05:36:25
【问题描述】:

我创建了一个包含角色在内的一些信息的用户,我去获取一个预先选择的用户角色下拉列表进行修改。现在我可以修改它,但无法获取该用户的角色列表,在视图中,所有角色都存储在数据库中。

有人帮我解决它 这是我获取角色列表的百里香代码:

<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;
    }

【问题讨论】:

  • 你能分享你的控制器的代码吗?这将有助于了解您如何将角色传递给百里香叶模板
  • 我分享了,谢谢
  • 您似乎没有将角色添加到模型中。您必须创建 List,然后将其添加到您的模型中,名称为 "roles"。它应该类似于 model.addAttribute("roles", roleList)
  • 我创建了一个列表: List roles = user.getRole();我将它添加到模型中:model.addAttribute("roles", roles);我得到了同样的结果
  • 你需要创建一个Role 类并给它一个name 字段。当 thymeleaf 寻找 role.name 时,它实际上是在寻找 getName() 类中的 getName() 方法

标签: java spring-mvc spring-boot thymeleaf


【解决方案1】:

您的角色控制器看起来不错。您可以像这样编辑您的 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()。命名约定在春季很重要。

【讨论】:

  • 我总是得到所有没有预先选择角色的角色列表。我不知道我是否需要更改 thymeleaf 代码中的某些内容。
  • @Ing_ULT 我不确定你的意思?
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
相关资源
最近更新 更多