首页 > 解决方案 > JSF ViewScoped bean 未实例化

问题描述

我有一个视图范围的 jsf 托管 bean,当我向它添加方法时它没有被实例化。此 bean 使用会话范围的 bean 并尝试从中访问数据。

示例代码。

@ManagedBean
@ViewScoped
public class DecodingBean implements Serializable {

private Charge charge;

@ManagedProperty(value = "#{configBean}")
private ConfigBean configBean;

public void setConfigBean(ConfigBean configBean) {
    this.configBean = configBean;
}

@PostConstruct
public void initialize() {
    charge = new Charge();
}

public void save() {
    try (DbConnection dbConnection = DbUtil.getDbConnection();
            MyDao1 myDao1= new  MyDao1 (dbConnection );
            MyDao2 myDao2= new MyDao2 (dbConnection )) {
        charge.setPId(selectedPId);
        charge.setSId(selectedSId);
        charge.setStatusId(configBean.getNewStatusId());
        myDao2.updateCharge(charge);
        myDao1.deleteModifier(charge.getId(), ModifierType.P.toString());
        insertChargeModifiers(charge, myDao1);
        charge = new Charge();
    } catch (Exception ex) {
        LOG.error("Error saving Charge", ex);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error occurred while saving, please try again", ""));
    }
}

如果我删除了保存方法,bean 就会被实例化。

标签: primefacesjava-8jsf-2.2tomcat8managed-bean

解决方案


更正 jsf 库的版本后,此问题就消失了。我有 2.2.7 的 jar 和不同版本的 web-facesconfig。

仍然不确定这是原因,但它已经消失了。


推荐阅读