Java 忽略瞬态导叶形式字段
所以我有一个叫做“用户”的实体 在面板中,有一个下拉面板,其中用户的当前活动角色与“较低”的可能角色一起加载。这些选项是getRoles()的结果,所选选项应加载到“role”属性中Java 忽略瞬态导叶形式字段,java,wicket,dropdownchoice,Java,Wicket,Dropdownchoice,所以我有一个叫做“用户”的实体 在面板中,有一个下拉面板,其中用户的当前活动角色与“较低”的可能角色一起加载。这些选项是getRoles()的结果,所选选项应加载到“role”属性中 User sessionUser = StudySession.getSessionUser(); List<RoleTypeEnum> roles = new ArrayList<RoleTypeEnum>(); role.addAll(sessionUse
User sessionUser = StudySession.getSessionUser();
List<RoleTypeEnum> roles = new ArrayList<RoleTypeEnum>();
role.addAll(sessionUser.getActiveRole().getLowerAndEqualsThanSelf());
WefDropDownPanel<RoleTypeEnum> role =
new WefDropDownPanel<RoleTypeEnum>(helper.of(RoleTypeEnum.class, "role").errorRequired(), //
roles) //
.setSizes(Size.S0, Size.S1, Size.S4);
add(roles);
User sessionUser=StudySession.getSessionUser();
列表角色=新的ArrayList();
role.addAll(sessionUser.getActiveRole().getLowerAndEqualsThanSelf());
WeftDropDownPanel角色=
新的WefDropDownPanel(helper.of(roletypeaneum.class,“role”).errorRequired()//
角色)//
.设置尺寸(尺寸S0、尺寸S1、尺寸S4);
添加(角色);
则面板的onBeforeSave方法为:
@Override
protected void onBeforeSave(AjaxRequestTarget target, WefForm<User> form) {
super.onBeforeSave(target, form);
User user = getModelObject();
Set<UserProjectCenterRole> roles = user.getRoles();
UserProjectCenterRole currentRole = null;
if (!roles.isEmpty()) {
currentRole = roles.iterator().next();
}
else {
currentRole = new UserProjectCenterRole();
roles.add(currentRole);
}
currentRole.setRole(user.getRole());
currentRole.setUser(user);
currentRole.setActive(true);
}
@覆盖
保存前受保护的void(AjaxRequestTarget目标,WefForm){
super.onBeforeSave(目标、表单);
User=getModelObject();
Set roles=user.getRoles();
UserProjectCenterRole currentRole=null;
如果(!roles.isEmpty()){
currentRole=roles.iterator().next();
}
否则{
currentRole=新用户ProjectCenterRole();
角色。添加(当前角色);
}
currentRole.setRole(user.getRole());
currentRole.setUser(用户);
currentRole.setActive(true);
}
但此时“getRole”返回null。。。我猜不出为什么…看着你的
用户
课堂,我很困惑:角色
是一个集合
还是一个角色
?您确定没有输入错误,结果使用了错误的变量(即角色
而不是角色
)?我在User
类中也看不到getRole()
方法。关于getRole():这是一个拼写错误,我已经更正了代码(不是英文的…)。角色确实是一个集合,但我们使用RoleTypenum作为下拉选择的结果。。。要构建DropDownChoice,将迭代角色,并将其“role”属性添加到列表中,作为DropDownChoice的源。当用户选择一个选项时,该选项将转换为UserProjectCenterRole并添加到用户角色列表中。我还没有写这段代码,我是应该修复它的人……考虑到它被标记为@Transient
,当用户从下拉选择中选择某个内容时,角色
应该在何时何地设置为除空
之外的任何其他内容。问题是,当您创建用户时,所选角色将被保存。但是当您编辑用户时,它是空的。因此,在onBeforeSave方法中,当用户被创建时,运行“else”部分,当使用的部分被编辑时,运行“if”部分。。。当用户被创建时,会设置来自视图的角色字段,但在编辑的情况下不会发生这种情况,这就是问题所在。
User sessionUser = StudySession.getSessionUser();
List<RoleTypeEnum> roles = new ArrayList<RoleTypeEnum>();
role.addAll(sessionUser.getActiveRole().getLowerAndEqualsThanSelf());
WefDropDownPanel<RoleTypeEnum> role =
new WefDropDownPanel<RoleTypeEnum>(helper.of(RoleTypeEnum.class, "role").errorRequired(), //
roles) //
.setSizes(Size.S0, Size.S1, Size.S4);
add(roles);
@Override
protected void onBeforeSave(AjaxRequestTarget target, WefForm<User> form) {
super.onBeforeSave(target, form);
User user = getModelObject();
Set<UserProjectCenterRole> roles = user.getRoles();
UserProjectCenterRole currentRole = null;
if (!roles.isEmpty()) {
currentRole = roles.iterator().next();
}
else {
currentRole = new UserProjectCenterRole();
roles.add(currentRole);
}
currentRole.setRole(user.getRole());
currentRole.setUser(user);
currentRole.setActive(true);
}