1

seam 2.1.2セキュリティを使用しており、jsfrichfacesGUIによる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

コードが機能しない理由は、ロールが実際にデータベースに挿入される前に更新クエリが実行されているため、何も更新されないためです

私のアドバイスは、 でロール/ユーザー作成メソッドを使用しないことIdentityManagerです。ロールとユーザーを作成/編集するために Home コンポーネントを作成する方が、代わりに作成するよりも優れてIdentityManagerいます。

ただし、これを追求したい場合はJpaIdentityStore、メソッドを上書きし、カスタマイズして、createRole必要に応じてエンティティに入力する必要があります。

于 2012-10-17T16:30:59.763 に答える