3

我有一个带@ViewScoped注释的 managedbean,它的@PostContruct-method 从数据库中获取列表以显示在视图中的表中。
现在,当我删除一个项目时,我希望在视图中看到更改。
为了保持这种动态和可重用,我只想从数据库中删除(而不是从列表中手动删除)。所以我需要销毁/重新创建我想的 bean。现在我通过导航到相同的视图来做到这一点。但是我这样做的方式是不可重复使用的。
我可以手动销毁 bean 或导航到同一视图而不显式导航到特定视图(可重用性)吗?

我正在使用 JSF 2.1

4

3 回答 3

5

你已经在正确的轨道上。viewMap就像任何其他地图一样;您可以按名称删除ViewScopedbean。请原谅残酷的链接:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("yourBean");
于 2013-10-21T21:21:26.210 回答
2

我发现的一种解决方案是通过以下方式破坏 bean

FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();

我不确定这是否是要走的路,因为它只是破坏了每个viewscoped bean。在这种情况下,它并没有那么糟糕,但感觉不干净。
我很欣赏有关该或替代解决方案的任何想法。

于 2013-10-21T18:59:45.260 回答
-1

当您从操作属性返回方法内的非空值时,将重新创建 Bean。

索引.xhtml

...
<h:commandButton value="delete" action="bean.delete" />
...

豆类

...
public String delete() {
  // do operations
  return "index.xhtml?faces-redirect=true";
}
...
于 2013-10-21T09:30:00.700 回答