我的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帖子,但超时在我的情况下并不是一个很好的选择,因为我想立即结束对话。
答案 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 />
。这与其他建议类似,但结果将是导航规则文件,它们说明了您的应用程序页面流程,包括长时间运行的对话的划分。