【发布时间】: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