0

我的 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)上,立即结束对话。
我找到了这篇文章,但就我而言,超时不是一个好选择,因为我想立即结束对话。

4

3 回答 3

2

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

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

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

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

  }

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

于 2012-11-22T15:39:47.980 回答
1

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

创建一些 javascript 函数,使用a4j:jsFunction它调用一个用@End.

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

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

于 2012-11-20T19:03:22.543 回答
0

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

于 2012-12-10T01:25:55.943 回答