【问题标题】:Spring - How to get list of object in listbox jspSpring - 如何在列表框jsp中获取对象列表
【发布时间】:2015-09-25 08:18:31
【问题描述】:

我不明白为什么,当我在我的 jsp 文件中提交我的 spring 表单时,我可以获得一个对象角色列表,但没有一个被填充(id,roleName)。 我的表单允许创建一个新用户,一个用户可以有多个角色。

这是我的模型用户

@Entity
public class User implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String username;
private String password;
@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinTable(name="userandrole",
        joinColumns=@JoinColumn(name="user_id"),
        inverseJoinColumns=@JoinColumn(name="role_id"))
private List<Role> roles;
@Enumerated(EnumType.STRING)
private UserStatus status;
@ManyToOne
@JoinTable(name="userandpartenaire",
joinColumns=@JoinColumn(name="user_id"),
inverseJoinColumns=@JoinColumn(name="partenaire_id"))
private Partenaire partenaires;
//......}

这是我的模特角色

@Entity
public class Role {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String roleName;
@ManyToMany(mappedBy = "roles",fetch = FetchType.EAGER)
private List<User> users;
//..... }

这是我的控制器。首先向 jsp 发送一个用户和一个角色列表

@RequestMapping("/gestionAdmin")
public String setupForm(Map<String, Object> map){
    //System.out.println(fonction.hasRole("Partenaire"));
    User user = new  User();
    user.setRoles(new AutoPopulatingList<Role>(Role.class));
    List<User> usersList = userService.getAllUsers();
    Hibernate.initialize(usersList);
    map.put("user", user);
    map.put("usersList",usersList );
    map.put("rolesList", roleService.getAlltRoles());
    return "gestionAdmin";

}

JSP 文件

<form:form action="gestionAdmin.do" method="POST" commandName="user">
    <table>
        <tr>
            <td>username</td>
            <td><form:input path="username" /></td>
        </tr>
        <tr>
            <td>password</td>
            <td><form:input path="password" /></td>
        </tr>
        <tr>
            <td>Roles</td>
            <td><form:select path="roles" multiple="true" items="${rolesList}" itemLabel="roleName">
                </form:select>
            </td>
        </tr>
        <tr>
            <td>Status</td>
            <td><form:select path="status">  
             <form:option value="ACTIVE" label="Active"/>  
             <form:option value="INACTIVE" label="Inactive"/>  
         </form:select> </td>
        </tr>
        <tr>
            <td>
                <input type="submit" name="action" value="Search" />
                <input type="submit" name="action" value="Add" />
                <input type="submit" name="action" value="Update" />
            </td>
        </tr>
    </table>
</form:form>

最后是我可以获取表单信息的函数。这就是我有错误 NullPointerException 因为我尝试在对象用户中获取角色的角色名称(在 for 循环中查看 syso)

@RequestMapping(value="/gestionAdmin.do",  method=RequestMethod.POST)
public String setupFormAdmin(@ModelAttribute("user") @Valid User user,BindingResult result,Map<String, Object> map,@RequestParam String action){
    System.out.println(fonction.hasRole("Partenaire"));
    User users = new  User();
    User usersTest = userService.findUserByName(user.getUsername());
    User usersTestId = userService.findUser(user.getId());
    List<Role> roleList = new ArrayList<Role>();
    String messages="";
    //System.out.println("ooooo" + user.getPassword());
    if( fonction.hasRole("Admin")){
        switch (action.toLowerCase()) {
        case "add":             
            String mdp = user.getPassword();
            user.setPassword(fonction.encode(mdp));
            System.out.println(user.getRoles().size()); // Here my size of getRole is > 0 
            for (Role role : user.getRoles()) {
                //roleList.add(roleService.findRole(1));
                System.out.println(role.getRoleName() + " "+ role.getId()+"); // error NullPointerExcepction
            }
            user.setRoles(roleList);
            if(usersTest==null){
                userService.addUser(user);
            }else{
                messages="Utilisateur déja présent dans la base de donné";
            }
            break;

谢谢 (对不起我的英语)

【问题讨论】:

    标签: java spring forms hibernate jsp


    【解决方案1】:

    我找到了解决办法

    在控制器中我添加一个@InitBinder 角色

    @InitBinder
    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception {
    
       // super.initBinder(request, binder);
    
        binder.registerCustomEditor(List.class, "roles",new CustomCollectionEditor(List.class){
    
            @Override
            protected Object convertElement(Object element) {
                Role role = new Role();
                if (element != null && (element.toString().equals("1") || element.toString().equals("2") || element.toString().equals("3") || element.toString().equals("4"))) {
    
                    role.setId(Integer.parseInt(element.toString()));
                }
                return role;
            }
        });
    }
    

    我在表单中添加 itemsValue

    <form:select path="roles" multiple="true" items="${rolesList}" itemLabel="roleName" itemValue="id">
    

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 2011-02-02
      • 1970-01-01
      • 2019-09-05
      • 2018-09-19
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多