0

Seam3.2.2 を統合した私の JSF プロジェクトでは、更新が機能しません。値を更新する代わりに、テーブルに新しい値を挿入します。

ここで助けが必要です。

私のプロジェクトの流れ。
Pages.xml:

    <page  view-id="/updateUser.xhtml" action="#{userEditAction.setCurrentUser()}">
        <navigation>
            <rule if-outcome="success">
                <redirect view-id="/secure/admin/user/updateUser.xhtml"/> 
            </rule>
        </navigation>
        <begin-conversation join="true"></begin-conversation>
    </page>

UserEditAction.java Bean:

    @RequestParameter
    private Integer userId;

    @Override
    public String setCurrentUser(){
        System.out.println("Selected  userid ----- " + userId);
        currentUser = userService.getUser(userId);
        return "success";
    }

userUpdate.xhtml :

        <h:commandButton value="Update" tabindex="20"
            action="#{userAction.update}">
            <f:param name="userId" value="#{currentUser.userId}" />
        </h:commandButton>

userAction.java Bean

@Name("userAction")
@Stateless
@AutoCreate
public class UserActionImpl implements UserAction {

    @Out(value = "currentUser", scope = ScopeType.CONVERSATION)
    @In(value = "currentUser", scope = ScopeType.CONVERSATION, required = false)
    private CLRPUser currentUser;   

    @In
    private UserService userService;    

    @RequestParameter
    private Integer userId;

    private static final long serialVersionUID = 8282995226262125676L;

    public String update() {
        userService.saveOrUpdate(currentUser);
        return "success";
    }

userService.java:

    public Integer saveOrUpdate(CLRPUser user) {
        // TODO Validation...check cell phone number.. email id..
        // user.setLastUpdatedBy(currentUserId);
        user.setLastUpdatedBy(loggedInUser.getId());
        user.getResidentialAddress().setLastUpdatedBy(loggedInUser.getId());
        user.getShippingAddress().setLastUpdatedBy(loggedInUser.getId());

userMapper.java :

public class UserMapper {

    public static UserEntity mapUserEntity(CLRPUser user) {
        UserEntity userEntity = new UserEntity();

        userEntity.setEmailAddress(user.getEmailAddress());
        userEntity.setFirstName(user.getFirstName());
        userEntity.setLastName(user.getLastName());
        userEntity.setHomeNumber(user.getHomeNumber());
        userEntity.setOfficeNumber(user.getOfficeNumber());
        userEntity.setCellNumber(user.getCellNumber());
        AuditInfo auditInfo = new AuditInfo();
        auditInfo.setLastUpdatedBy(user.getLastUpdatedBy());
        auditInfo.setLastUpdatedTime(user.getLastUpdatedTime());
        userEntity.setAuditInfo(auditInfo);
        userEntity.setType(user.getType());
        userEntity.setPreferenceId(user.getPreferenceId());
        userEntity.setASPCustomerId(user.getAspCustomerId());

        user.getResidentialAddress().setAddressType("R");
        user.getShippingAddress().setAddressType("S");
        AddressEntity residential = AddressMapper.mapAddressEntity(user
                .getResidentialAddress());
        AddressEntity shipping = AddressMapper.mapAddressEntity(user
                .getShippingAddress());
        List<AddressEntity> addressess = new ArrayList<AddressEntity>();
        addressess.add(residential);
        addressess.add(shipping);

        userEntity.setAddresses(new HashSet<AddressEntity>(addressess));

        /*UserLoginEntity userLogin = UserLoginMapper.mapUserLoginEntity(user.getUserLogin());
        List<UserLoginEntity> userLoginn = new ArrayList<UserLoginEntity>();
        userLoginn.add(userLogin);

        userEntity.setUserLogin(new HashSet<UserLoginEntity>(userLoginn));*/
        // userEntity.setCardTypeEntity(cardTypeEntity)
        return userEntity;
    }

JPAUserDAO.java

    public Integer saveOrUpdate(UserEntity newUser) {       
        entityManager.merge(newUser);
        return newUser.getUserId();
    }
4

1 に答える 1

0

問題:-エンティティの新しいインスタンスを作成し、その Id または主キーを設定しない
たびに更新するため、挿入が発生します。UserEntityそのため、休止状態を保存すると、エンティティが新しく、新しいIDが生成されるたびに挿入が発生すると考えられます

解決策:-それを修正するには、 メソッド
に以下の行を追加しますmapUserEntity()

userEntity.setId(user.getId());

だからあなたのmapUserEntity()意志は次のようになります

public static UserEntity mapUserEntity(CLRPUser user) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(user.getId());//Note:-added this line
        userEntity.setEmailAddress(user.getEmailAddress());
        userEntity.setFirstName(user.getFirstName());
        userEntity.setLastName(user.getLastName());
...
}
于 2013-08-10T11:33:29.623 に答える