1

我正在使用 seam 2.1.2 安全性,并使用 jsf richfaces GUI 的 identitymanager 创建了一个角色。在创建过程中,我会为在数据库中创建的角色添加一个“描述”,创建角色是可以的,但没有添加描述字段,我必须更新角色(在 GUI 的其他操作中)才能看到存储在数据库中的描述字段. 问题是我该怎么做才能存储在创建操作中提交的“描述”?

下面是我的代码:

  public boolean createRole(Role role) {
    IdentityManager identityManager = IdentityManager.instance();
logger.info("creating role:" + role.getRoleName());
if (identityManager.roleExists(role.getRoleName())) {
    return false;
}
if (identityManager.createRole(role.getRoleName())) {
    completeRolePersistence(role);
    return true;
}
return false;
}

和 completeRolePersistence 方法:

public void completeRolePersistence(Role role) {
    logger.info("setting additional info to role...");
    Query query = em.createNamedQuery("UPDT_ADDITIONALS");
    query.setParameter("name", role.getRoleName())
            .setParameter("description", role.getDescription())
            .setParameter("level", role.getRoleLevel());
    int updated = query.executeUpdate();
    logger.info("roles updated with desc : " + updated);
}

似乎查询没有执行,我在日志中打印

roles updated with desc : 0
4

1 回答 1

0

您的代码不起作用的原因是因为您的更新查询是在角色实际插入数据库之前执行的,因此它不会更新任何内容。

My advice is to not use the role/user creation methods in IdentityManager. You're better off creating Home components to create/edit your roles and users than having IdentityManager do it for you.

If you however want to pursue this, you need to overwrite JpaIdentityStore, customize the createRole method and have it populate the entity as needed.

于 2012-10-17T16:30:59.763 回答