2011-10-19 33 views
0

在我们的应用程序中,我们为每个用户选项卡定义了一个portlet。在导航到新portlet之前清除JSF会话

  • 我们使用的是JSF 1.2 + Portlets。
  • 当用户 从一个标签导航到另一个时,我想清除FacesContext会话托管的bean。

实现此目的的最佳方法是什么?

  • 是否有任何可用的portlet的卸载功能,其中用户离开 标签(门户)之前,我们可以写 代码以删除会话管理的Bean。
+0

你确定你的托管bean需要是@SessionScoped吗?在你的场景中,似乎视图或对话范围会更好。 – jFrenetic

+0

我们正在使用JSF 1.2,所以我不能使用视图范围感谢 – Greg

+0

CDI是否可用?如果是这样,它有对话范围。 – jFrenetic

回答

1

当你使用JSF 1.2,因此无法采取其目的是出于这样的目的,新的视图范围内的利益,你最好的选择就是抓住MyFaces TomahawkMyFaces Orchestra。您只需要将“视图”范围的bean从会话范围返回到请求范围。

如果您想模拟新的JSF 2.0视图范围,即只要您使用相同视图进行交互,bean就会存活,那么您需要将Tomahawk的<t:saveState>添加到引用请求范围的bean的视图中。

<h:form> 
    <h:inputText value="#{bean.input}" /> 
    <h:commandButton value="Submit" action="#{bean.submit}" /> 
    <t:saveState value="#{bean}" /> 
</h:form> 

如果你想模仿新CDI谈话范围,它可以跨越同一个浏览器选项卡中的多视图,那么你需要整合乐团。