0

我无法通过 roo 为一对多关系生成适当的 GUI。特别是,我需要一个多项选择元素来选择与用户相关联的权限(弹簧安全)。

我创建了我的 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 上,我可以创建并列出所有权限和注册用户。但是,在创建注册用户时,我只能设置字符串字段和布尔字段,不能设置一对多的关系。我该如何解决?

4

1 回答 1

1

如果我试图完成这个任务,我会打印出我所有的复选框,其中包含可用选项作为数组键,名称如下:

<input type="checkbox" name="role[]" value="ROLE_ONE">
<input type="checkbox" name="role[]" value="ROLE_TWO">

然后,我会将这些参数映射到一个 String[] 数组,就像在这篇文章中一样

@RequestParam(value="myParam[]" String roles)

然后,我将遍历字符串并添加创建 MyBaseAuthority 对象,附加您的用户并 persist() 它们。

于 2013-09-01T05:56:49.697 回答