在Seam中离开页面时结束对话

时间:2012-11-20 00:28:13

标签: seam2

我的Seam项目中有一个向导,有四页。当用户通过访问第一页(wizard1.xhtml)启动向导时,我开始对话。要在我的pages.xml中执行此操作,我有以下代码。

<page view-id="/pages/wizard1.xhtml">
  <begin-conversation join="true"/>
</page>

在向导的最后一页(wizard4.xhtml)我有一个保存按钮,我使用@End注释结束对话。

@End
public String save() {}

但是,在向导中移动时,用户可以通过单击链接重定向到向导外部的页面。请注意,如果发生这种情况,会话尚未结束。
我想要的是在用户不再使用向导页面(wizard1.xhtml,wizard2.xhtml,wizard3.xhtml或wizard4.xhtml)时立即结束对话。
我找到this帖子,但超时在我的情况下并不是一个很好的选择,因为我想立即结束对话。

3 个答案:

答案 0 :(得分:2)

我认为您问题的最直接和最自然的解决方案是使您的点击链接如下:

 <s:link value="here is the link" view="/expectedView.xhtml"  
         action ="#{targetBean.endingConversation()}"/>

你的endingConversation()方法可以是这样的:

  @End
  public void endingConversation(){
       //do cleanup code

  }

这个想法很简单,你应该在每个可能的出口点都使用一名警卫。

答案 1 :(得分:1)

不确定它是否会起作用,只是一个想法。

使用a4j:jsFunction创建一些javascript函数,该函数调用使用@End注释的方法。

然后将此jsFunction作为onClick处理程序添加到您的所有链接中。 (不确定onClick是否是最好的处理程序。)

当用户离开你的向导时,会调用该方法,并且应该结束对话。

答案 2 :(得分:0)

如果您使用pages.xml(或每页page.xml文件)在您的应用程序中实现页面导航,则必须根据操作字符串为每个页面指定重定向行为。在未继续向导对话的每个重定向的导航规则中,您可以添加<end-conversation />。这与其他建议类似,但结果将是导航规则文件,它们说明了您的应用程序页面流程,包括长时间运行的对话的划分。