【发布时间】:2019-10-04 04:35:42
【问题描述】:
我正在尝试将在 Tomcat 8.5 Servlet 3.1 容器中运行的旧 Web 应用程序从 JSF 2.1.1-FCS 升级到 2.2.14。
Mojarra JSF 最低要求(我猜是最新版本,该页面似乎不太清楚)除其他外指出,需要 CDI 1.2,建议使用 2.0。
我添加了 cd-api-2.0 和weld-servlet-shaded-3.0.0.Final 以及其他依赖项。在我测试一些我们已经使用了很长时间的 URL 之前,一切似乎都有效。我们的应用程序一直在使用cid 参数。 Weld 使用相同的参数来跟踪对话。结果我们得到了WELD-000321: No conversation found to restore for id 错误。
我想尽早致电org.jboss.weld.context.http.HttpConversationContext.setParameterName(String cid) 来修改此网络应用程序的值。
在 Servlet 3.1 容器上下文(如 Tomcat 8.5 提供的容器上下文)中更改此值的最佳方法是什么?
【问题讨论】:
-
您是否从源代码中“手动”调用该方法?您是否迁移到 CDI 注释?
-
可以配置焊接参数iirc
-
@Selaron,我确实尝试注入一个 HttpConversationContext 以从几个不同的地方调用 setParameterName ,类似于此答案中显示的内容:stackoverflow.com/a/26744986/101151,但似乎没有得到注入。我不确定什么时候是合适的时机。在 servlet 中似乎为时已晚。
-
@Kukeltje 我回去再次根据您的建议查找参数。看起来它是 WELD_CONTEXT_ID_KEY。效果很好,谢谢!我不知道我是否错过了它,因为我太努力寻找 org.jboss.weld... 或者是因为他们在环境中描述它的方式与我的用例和错误不匹配。错误报告 WELD-1697 确实如此。
-
酷,如果您在 stackoverflow 中找不到重复项,请创建一个答案。
标签: cdi jsf-2.2 tomcat8.5 servlet-3.1