【问题标题】:WELD-001303: No active contexts for scope type javax.faces.flow.FlowScopedWELD-001303:范围类型 javax.faces.flow.FlowScoped 没有活动上下文
【发布时间】:2016-11-27 03:51:23
【问题描述】:

刚开始使用 Glassfish 4.1(即使用 Mojarra)使用 FacesFlow 进行我的第一步,当调用我的流程时,我收到一个名为

的错误
[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 中,流程的第一页名为 register.xhtml

在 sn-p 之后,我尝试了 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>

到目前为止我尝试了什么: 我发现一个帖子建议&lt;Context antiJARLocking="true" path="/PROJEST_NAME"/&gt; 可以解决问题,但在谷歌搜索标签后发现它是一个过时的 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

有什么想法吗?

【问题讨论】:

  • 你有可以重现这个的示例应用吗?

标签: jsf cdi glassfish-4.1 faces-flow


【解决方案1】:

至少在 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.*

如果不是那么可能

  1. this could help
  2. and this

GL!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2014-12-25
    • 2013-05-06
    相关资源
    最近更新 更多