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