如何触发视图结束bean的破坏?

时间:2013-10-21 09:14:03

标签: jsf-2

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

我正在使用JSF 2.1

3 个答案:

答案 0 :(得分:4)

你已经走上正轨了。 viewMap就像任何其他地图一样;您可以按名称删除ViewScoped bean。请原谅残暴的链接:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("yourBean");

答案 1 :(得分:1)

我发现的一个解决方案是通过

销毁豆子
FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();

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

答案 2 :(得分:-1)

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

的index.xhtml

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

Bean.class

...
public String delete() {
  // do operations
  return "index.xhtml?faces-redirect=true";
}
...