gpt4 book ai didi

java - Spring - 如何获取列表框jsp中的对象列表

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:32 25 4
gpt4 key购买 nike

我不明白为什么,当我在 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;
//..... }

这是我的 Controller 。首先将用户和角色列表发送到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 因为我尝试在对象 User 中获取角色的 id 角色名称(在 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;

谢谢(对不起我的英语)

最佳答案

我找到了解决办法

在 Controller 中我添加了角色的@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">

关于java - Spring - 如何获取列表框jsp中的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275432/

25 4 0
文章推荐: c++ - 缺少 WinUSB 模板
文章推荐: javascript - 通过网页关闭计算机
文章推荐: c++ - Xcode:使用 32 位库编译 64 位应用程序
文章推荐: javascript - 如何将