Java 忽略瞬态导叶形式字段

Java 忽略瞬态导叶形式字段,java,wicket,dropdownchoice,Java,Wicket,Dropdownchoice,所以我有一个叫做“用户”的实体 在面板中,有一个下拉面板,其中用户的当前活动角色与“较低”的可能角色一起加载。这些选项是getRoles()的结果,所选选项应加载到“role”属性中 User sessionUser = StudySession.getSessionUser(); List<RoleTypeEnum> roles = new ArrayList<RoleTypeEnum>(); role.addAll(sessionUse

所以我有一个叫做“用户”的实体

在面板中,有一个下拉面板,其中用户的当前活动角色与“较低”的可能角色一起加载。这些选项是getRoles()的结果,所选选项应加载到“role”属性中

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);
    }