刚开始使用FacesFlow与Glassfish 4.1(即使用Mojarra)完成我的第一步,并在调用我的流程时出现名为
的错误[SEVERE] [] [javax.enterprise.resource.webcontainer.jsf.application] ... Error Rendering View[/register/register.xhtml]
org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.faces.flow.FlowScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:708)
其他几个人也有这个错误,正如我在网上看到的那样但是其他方面的解决方案对我来说不起作用(见下文)。
我也试过了@SessionScoped
。所以它与@FlowScoped
。
对于我在书中所读到的,我用来加快速度,我应该没有编码和配置结束,因为根据API @FlowScoped
是基于CDI的,我在我的支持bean上使用以下代码/控制器。
@Named
@FlowScoped(value="register")
public class RegisterController implements Serializable {
我有一个名为register的流程,其页面位于一个目录/寄存器中,该流程的第一页名为register.xhtml
在以下代码段中,我尝试了register/register-flow.xml
配置文件以及WEB-INF/faces-config.xml
但未成功。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
<flow-definition id="register">
<flow-return id="overview">
<from-outcome>/index</from-outcome>
</flow-return>
</flow-definition>
</faces-config>
到目前为止我尝试了什么:
我发现一篇帖子暗示<Context antiJARLocking="true" path="/PROJEST_NAME"/>
可以解决问题,但在谷歌搜索标签后,它发现它是一个过时的Tomcat标签。
将@Named
更改为@ManagedBean
并没有真正帮助,就像在一个页面上建议的那样。我可以打开页面,但是当再次调用流程的下一页时,我的控制器类中的数据将不可用。但是@ManagedBean
我不应该真的有效,因为@FlowScoped
是基于CDI的。
另一篇文章建议确保javax.faces.CLIENT_WINDOW_MODE
已启用。我尝试通过将以下内容添加到我的web.xml但没有成功
<context-param>
<param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
<param-value>url</param-value>
</context-param>
另一位建议使用我已经做过的Glassfish 4.x
有什么想法吗?
答案 0 :(得分:-2)
至少使用Glassfish 4.1,您需要添加 cdi-api.jar 目录库。
Glassfish包含 weld-osgi-bundle.jar ,但它还需要 cdi-api.jar 才能正常工作,因为 CDI bean范围不在weld-osgi...
中,所以如果不是它,请确保你拥有它:
[gf_installation_path]/glassfish/modules/cdi-api.jar
这样,您就可以访问CDI Beans
使用的包,即javax.enterprise.context.*
如果不是那么可能
GL!