Jsf CDI会话作用域的长时间运行Bean不工作
我在理解Weld或CDI的对话范围时遇到了一些问题 在我的JSF Faclets页面中,我调用:Jsf CDI会话作用域的长时间运行Bean不工作,jsf,java-ee-6,cdi,jboss-weld,Jsf,Java Ee 6,Cdi,Jboss Weld,我在理解Weld或CDI的对话范围时遇到了一些问题 在我的JSF Faclets页面中,我调用: <f:metadata> <f:event type="preRenderView" listener="#{viewBean.start}" /> </f:metadata> 现在,每当我刷新浏览器时,新的对话就会开始。这是正确的行为吗?那么,为什么谈话总是短暂的呢?没有抛出异常。将创建beans.xml
<f:metadata>
<f:event type="preRenderView" listener="#{viewBean.start}" />
</f:metadata>
现在,每当我刷新浏览器时,新的对话就会开始。这是正确的行为吗?那么,为什么谈话总是短暂的呢?没有抛出异常。将创建beans.xml并为空:
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
简短回答:是的,这是正确的行为 长答案:对话代表一个“工作单元”,必须明确界定这一单元。这是通过显式调用conversation.begin()完成的-正如您已经做的那样。如果您想在多个请求上使用同一对话,您必须传播它-这是您没有做的:-) 传播会话时,会话id会附加到请求中。这会告诉容器需要哪个对话。当您只需点击刷新按钮而请求中没有会话id时,会为每个请求生成一个新的会话 从文件中: 对话上下文会自动更改 与任何JSF faces请求一起传播 (JSF表单提交)或重定向。信息技术 不会自动传播 例如,非faces请求, 通过链接导航 如果需要手动传播,只需将对话id添加到请求:
<h:link outcome="/addProduct.xhtml" value="Add Product">
<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
</h:link>
所有这些,还有更多的解释。@BalusC-这个“清理”编辑是关于什么的?我的名字和“干杯”这个词有问题吗?我遗漏了什么,还是你的个人品味?我不太相信它的好处…>“我可以使用签名或标语吗?”如果您不同意,请将其提交给我。
<h:link outcome="/addProduct.xhtml" value="Add Product">
<f:param name="cid" value="#{javax.enterprise.context.conversation.id}"/>
</h:link>