Java Spring-如何在listbox jsp中获取对象列表
我不明白为什么当我在jsp文件中提交spring表单时,我可以得到一个对象角色列表,但没有一个被填充(id,roleName)。 我的表单允许创建一个新用户,并且一个用户可以有多个角色 这是我的模型用户Java Spring-如何在listbox jsp中获取对象列表,java,spring,forms,hibernate,jsp,Java,Spring,Forms,Hibernate,Jsp,我不明白为什么当我在jsp文件中提交spring表单时,我可以得到一个对象角色列表,但没有一个被填充(id,roleName)。 我的表单允许创建一个新用户,并且一个用户可以有多个角色 这是我的模型用户 @Entity public class User implements Serializable{ @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String username; privat
@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;
//......}
@实体
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
私有字符串用户名;
私有字符串密码;
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@JoinTable(name=“userandrole”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“role\u id”))
私有列表角色;
@枚举(EnumType.STRING)
私有用户状态;
@许多酮
@JoinTable(name=“userandpartenaire”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“partenaire\u id”))
私人合伙人;
//......}
这是我的榜样
@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;
//..... }
@实体
公共阶级角色{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
私有字符串roleName;
@ManyToMany(mappedBy=“roles”,fetch=FetchType.EAGER)
私人名单用户;
//..... }
这是我的控制器。首先,向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";
}
@RequestMapping(“/gestionAdmin”)
公共字符串设置窗体(映射){
//System.out.println(fonction.hasRole(“Partenaire”);
用户=新用户();
user.setRoles(新的AutoPopulatingList(Role.class));
List usersList=userService.getAllUsers();
初始化(usersList);
map.put(“用户”,user);
map.put(“usersList”,usersList);
put(“rolesList”,roleService.getAlltRoles());
返回“手势管理员”;
}
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,因为我试图在对象用户中获取角色的角色名id(在for循环中查找syso)
@RequestMapping(value=“/gestionAdmin.do”,method=RequestMethod.POST)
公共字符串setupFormAdmin(@ModelAttribute(“用户”)@有效用户用户、BindingResult结果、映射映射、@RequestParam字符串操作){
System.out.println(fonction.hasRole(“Partenaire”);
用户=新用户();
User usersTest=userService.findUserByName(User.getUsername());
User usersTestId=userService.findUser(User.getId());
List roleList=new ArrayList();
字符串消息=”;
//System.out.println(“ooooo”+user.getPassword());
if(fonction.hasRole(“Admin”)){
开关(action.toLowerCase()){
案例“添加”:
字符串mdp=user.getPassword();
user.setPassword(fonction.encode(mdp));
System.out.println(user.getRoles().size());//这里我的getRole大小大于0
for(角色:user.getRoles()){
//roleList.add(roleService.findRole(1));
System.out.println(role.getRoleName()+“”+role.getId()+“”;//错误NullPointerException
}
user.setRoles(角色列表);
if(usersTest==null){
userService.addUser(用户);
}否则{
messages=“利用德加·普雷丹基地”;
}
打破
谢谢
(对不起我的英语)我找到了解决办法
在控制器中,我添加了一个@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">
我找到了解决办法
在控制器中,我添加了一个@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">