繁体   English   中英

在ManagedBean的@PostConstruct中设置的属性的可见性

[英]visibility of property set in @PostConstruct in ManagedBean

我正在尝试在@PostConstruct中设置的@RequestScoped Bean中获取属性值。 我有editUser页女巫从其他页面获取userId,并且我从@PostConstruct中的数据库获取用户,但是当我尝试在同一页面中编辑该用户时,用户对象为null,在方法editUser中。 有没有一种方法可以获取在PostConstruct中设置的对象?

这是我的EditUserBean:

 package ba.nedim.colaborationtoolapp.model;

 import ba.nedim.colaborationtoolapp.dto.UserDTO;
 import ba.nedim.colaborationtoolapp.services.RegisterService;
 import java.io.Serializable;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.ejb.EJB;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.RequestScoped;
 import org.primefaces.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

@ManagedBean
@RequestScoped
public class EditUserBean implements Serializable{

@EJB
private RegisterService userService;
private final Logger log = LoggerFactory.getLogger(EditUserBean.class);

private int idUser;

@ManagedProperty("#{param.id}")
private int actionId;

public int getActionId() {
    return actionId;
}

public void setActionId(int actionId) {
    this.actionId = actionId;
}

private UserDTO user = new UserDTO();

public UserDTO getUser() {
    return user;
}

public void setUser(UserDTO user) {
    this.user = user;
}

@PostConstruct
private void initialize(){
    if(actionId!=0){
        setUser(userService.getUserByID(actionId));
    }
}

public void editUser(){
    UserDTO user = getUser();
    log.info("UserID:" + user.getIdusers());
}

private String gotoUserPage(){
    return "users";
}

}

页面完全呈现后,@ @RequestScoped bean及其所有实例变量(包括user )将被销毁。 我认为这是您随后尝试执行editUser()结果,这会导致NPE。

请改用@ViewScoped bean,以确保您的实例变量在回发到同一视图后仍然有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM