JSF ViewScoped bean意外行为

时间:2013-11-19 04:03:36

标签: java jsf

(抱歉我的英语不好)
我正在使用在Tomcat 7中运行的JSF 2.2和Spring 3.2开发一个项目。 发生ViewScoped Managed Bean的意外行为。

我的相关Managed Bean是

@Name
@ViewScoped
public class InvoiceBean implements Serializable {
    @Inject
    private InvoiceService service;
    private Invoice invoice;
    private Detail detail;

    ...

    public void addDetail() {
        if (invoice.getDetails().isEmpty()) {
            invoice.setDetails(new ArrayList<Details>());
        }
        invoice.getDetails().add(detail); <--- Add a detail from the view
    }
}

我的相关实体

@Entity
public class Invoice implements Serializable {

    @Id
    private Integer id;
    @OneToMany
    private List<Detail> details;

    ...
}

@Entity
public class Detail implements Serializable {

    @Id
    private Integer id;

    ...

}

嗯,上面的代码工作正常:我可以使用带有actionListener =#{invoiceBean.addDetail}的CommandButton从视图中添加一些细节,并在Primefaces数据表上看到update =“detailsTable”。
(请注意,我刚刚将“详细信息”对象添加到发票的“详细信息”属性中,此处不涉及数据库)。 当我想同时从另一台机器添加细节时,“问题”开始了:我看到从第一台机器添加的细节,这不是预期的行为。
我希望ManagedBean属性是独立的,可以这么说:我不想看到从第一台机器添加的细节,因为这是一个新的不同的发票。
我做错了什么?

0 个答案:

没有答案