我无法通过roo为一对多关系生成适当的GUI。特别是,我需要一个多选元素来在权限(spring security)中进行选择以与用户相关联。
我创建了我的RegisteredUser类:
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class RegisteredUser extends MyUser implements UserDetails,
CredentialsContainer {
private String password;
private String username;
private Boolean enabled = true;
private Boolean accountNonExpired = true;
private Boolean credentialsNonExpired = true;
private Boolean accountNonLocked = true;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<MyBaseAuthority> authorities = new HashSet<MyBaseAuthority>();
@Override
public void eraseCredentials() {
password = null;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return accountNonExpired;
}
@Override
public boolean isAccountNonLocked() {
return accountNonLocked;
}
@Override
public boolean isCredentialsNonExpired() {
return credentialsNonExpired;
}
@Override
public boolean isEnabled() {
return enabled;
}
}
然后是MyBaseAuthority类:
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class MyBaseAuthority extends ObjectWithId implements
GrantedAuthority {
private String authority;
@Override
public String getAuthority() {
return authority;
}
}
然后我不得不手动为MyBaseAuthority创建控制器,但不是为RegisteredUser(由webmvc命令生成)创建控制器:
@RequestMapping("/registeredusers")
@Controller
@RooWebScaffold(path = "registeredusers", formBackingObject = RegisteredUser.class)
public class RegisteredUserController {
}
@RequestMapping("/authorities")
@Controller
@RooWebScaffold(path = "authorities", formBackingObject = MyBaseAuthority.class)
public class MyBaseAuthorityController {
}
在GUI上,我可以创建并列出所有权限和注册用户。但是,在创建注册用户时,我只能设置字符串字段和布尔字段,而不能设置一对多关系。我该如何解决这个问题?
答案 0 :(得分:1)
如果我试图完成这项任务,我会打印出所有复选框,并将可用选项打印为数组键,其名称如下:
<input type="checkbox" name="role[]" value="ROLE_ONE">
<input type="checkbox" name="role[]" value="ROLE_TWO">
然后,我将这些参数映射到String []数组,如this post
@RequestParam(value="myParam[]" String roles)
然后我会循环遍历字符串并添加创建MyBaseAuthority对象,附加您的用户并持久化()它们。