gpt4 book ai didi

java - 如何在 Servlet 中注入(inject) ConversationScoped bean

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:40 25 4
gpt4 key购买 nike

我需要将 ConversationScoped bean 注入(inject)到 servlet 中。我使用标准的简单 @Inject 标记,并使用 cid 参数调用 servlet,但是当它调用注入(inject) bean 中的任何方法时,我收到以下错误:

org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped

我可以在 servlet 中注入(inject)这些 bean 还是只能注入(inject) Session 和 Request 作用域的 bean?

最佳答案

在 servlet 中,上下文是应用程序上下文,这就是您放宽对话范围的原因。这是一个小型实用程序类,如果您希望在 servlet 中支持对话范围,您可以将其用作匿名类并包装请求...

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import org.jboss.weld.Container;
import org.jboss.weld.context.ContextLifecycle;
import org.jboss.weld.context.ConversationContext;
import org.jboss.weld.servlet.ConversationBeanStore;


public abstract class ConversationalHttpRequest {
protected HttpServletRequest request;


public ConversationalHttpRequest(HttpServletRequest request) {
this.request = request;
}

public abstract void process() throws Exception;

public void run() throws ServletException {
try {
initConversationContext();
process();
} catch (Exception e) {
throw new ServletException("Error processing conversational request", e);
} finally {
cleanupConversationContext();
}
}

private void initConversationContext() {
ConversationContext conversationContext = Container.instance().deploymentServices().get(ContextLifecycle.class).getConversationContext();
conversationContext.setBeanStore(new ConversationBeanStore(request.getSession(), request.getParameter("cid")));
conversationContext.setActive(true);
}

private void cleanupConversationContext() {
ConversationContext conversationContext = Container.instance().deploymentServices().get(ContextLifecycle.class).getConversationContext();
conversationContext.setBeanStore(null);
conversationContext.setActive(false);
}

}

关于java - 如何在 Servlet 中注入(inject) ConversationScoped bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4828504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com