(抱歉我的英语不好)
我正在使用在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属性是独立的,可以这么说:我不想看到从第一台机器添加的细节,因为这是一个新的不同的发票。
我做错了什么?