1

我最近一直在使用 Seam,临时对话仍然让我感到困惑。

在我们的项目中,我们使用ExternalContext.redirect()将用户重定向到响应页面。根据我的阅读,Seam 对话在调用渲染响应阶段时结束。

但后来我在其他地方读到:Seam 在 JSF 回发和重定向之间透明地传播对话上下文(包括临时对话上下文)

因此,当我重定向到同一页面时会发生什么,commandLinks 始终将相同的 conversationId 附加到其操作 url。正如页面所说,我试图用 结束临时对话 <f:param name="conversationPropagation" value="none"/>,但这会导致在呈现重定向页面时,对话上下文已经是 fred 并且我们使用的 bean 不能再在响应中使用。

所以我想知道的是,是否有办法通过重定向结束对话并保持上下文直到呈现响应?

如果没有,临时对话何时真正结束?因为由于对话上下文是通过重定向和回发传播的,所以对我来说它永远不会结束。

4

1 回答 1

0

我认为 CONVERSATION 范围是由 SEAM Frame work throw UI 自动维护的,如果你想创建一个新的对话,那么你可以这样做。

<h:commandButton id="conId" value="New Conversation" 
    action="#{conversationManager.clearConversation('/views/Hello.seam')}">  
</h:commandButton>

我不确定,但如果你想关闭对话,那么你可以尝试这样。

getConversation().end();

我不确定它是否会起作用。

于 2011-10-07T14:12:22.493 回答