【问题标题】:Conversation Scope CDI with Ajax使用 Ajax 的对话范围 CDI
【发布时间】:2013-01-07 19:01:11
【问题描述】:

我正在尝试使用 CDI 对话范围,但我有一些疑问: - 使用ajax请求时是否需要传播cdi id?

例如:

    <p:spinner value='#' min="1" max="99" styleClass="spinerqtde" title="Quantidade" stepFactor="1" maxlength="2">
<f:param name="cid" value="#{carrinho.conversation.id}"></f:param>
<p:ajax update="@form" listener='#{carrinho.lstSpinerProduto}' process="@this" />
</p:spinner>

因为当我不这样做时,我意识到方法“@postConstruct”被再次初始化,并创建了一个新的 CID。

ManagedBean 代码:

@Named("carrinho")

@ConversationScoped
public class CCarrinho implements Serializable
{
.
.
.
 @Inject
    private Conversation conversation;
.
.
.
 @PostConstruct
    public void inicializar()
    {
    if (getConversation().isTransient())
    {
      getConversation().begin();

    }
    }

谢谢。 再见!

【问题讨论】:

    标签: java jsf jakarta-ee cdi conversation-scope


    【解决方案1】:

    当前会话的 id 保存在当前视图中,当您执行回发(ajax 请求也是回发)时,会话 id 就在那里,因此您无需提供它。

    【讨论】:

    • 你能向我澄清一下吗?如果您不需要提供 CID,为什么 OP 会这样说?:因为当我不需要时,我意识到方法“@postConstruct”再次初始化,并创建了一个新的 CID.
    • 但是,为什么当您不通过 f:param 手动提供 CID 时,会话范围会重新启动?这是我的疑问。
    • f:param 嵌套在哪个组件中?
    • f:param 携带嵌套在执行 ajax 请求的组件中的 CID,例如一个 h:commandButton。
    • 这应该是开箱即用的,无需为 f:param 提供对话 ID。如果不是,这可能是一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2011-05-13
    • 2014-07-17
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多