【问题标题】:WELD-001303 with JSF Flows Packaged in EAR File - WELD-001303: No active contexts for scope type javax.faces.flow.FlowScopedJSF 流打包在 EAR 文件中的 WELD-001303 - WELD-001303:范围类型 javax.faces.flow.FlowScoped 没有活动上下文
【发布时间】:2015-06-29 08:22:23
【问题描述】:

使用 JSF Flows 将 WAR 文件转换为 EAR 文件。 WAR文件结构为:

booking/booking-flow.xml
booking/booking.xhtml
booking/confirm.xhtml
booking/print.xhtml
booking/showtimes.xhtml
WEB-INF/classes/org/javaee7/movieplex7/booking/Booking.class
WEB-INF/faces-config.xml
WEB-INF/template.xhtml
WEB-INF/web.xml

faces-config.xml 是:

<faces-config version="2.2"
          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">
</faces-config>

web.xml 是:

<web-app version="3.1" 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-app_3_1.xsd">
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.CLIENT_WINDOW_MODE</param-name>
    <param-value>url</param-value>
</context-param>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>

booking-flow.xml 是:

<faces-config version="2.2" 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">

<flow-definition id="booking">
    <flow-return id="goHome">
        <from-outcome>/index</from-outcome>
    </flow-return>
</flow-definition>

</faces-config>

JSF Flow 在打包为 WAR 文件时可以正常工作。但它给出了以下错误:

org.jboss.weld.context.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.faces.flow.FlowScoped

当它被打包为 EAR 文件中的 WAR 文件时。 EAR 结构是:

booking-1.0-SNAPSHOT.war
./lib
./lib/contracts-1.0-SNAPSHOT.jar

booking-1.0-SNAPSHOT.war 结构为:

booking/booking-flow.xml
booking/booking.xhtml
booking/confirm.xhtml
booking/print.xhtml
booking/showtimes.xhtml
WEB-INF/beans.xml
WEB-INF/classes/org/javaee7/movieplex7/booking/Booking.class
WEB-INF/classes/org/javaee7/movieplex7/booking/MainPage.class
WEB-INF/faces-config.xml
WEB-INF/web.xml

需要MainPage 类才能从 REST 端点检索结果。资源库合约存放在 lib 目录中。

在 GlassFish 4.1 上部署应用程序。

知道为什么这在独立的 WAR 文件中有效,但在打包到 EAR 文件中时无效?

【问题讨论】:

  • 合约 jar 文件中有什么?
  • Contracts 是 JSF 资源库合同,并被其他 WAR 文件用于一致的外观。
  • 里面有流范围的bean吗?
  • 啊哈。我的预感是该规范被解释为仅将流范围应用于 WAR 文件,而不是打包在耳中的库。所有 CDI 范围都会出现类似问题,因为应用范围可能是每个 war 文件、每个应用程序库,甚至是全局范围,具体取决于应用服务器。我讨厌耳朵:-(

标签: jsf glassfish wildfly java-ee-7 glassfish-4.1


【解决方案1】:

您在哪里部署?在升级 AS7.1.1 以使用 JSF2.2 时,https://developer.jboss.org/thread/203257 很有帮助。他们指出 FlowScoped 不适用于 AS7.1.1(以及可能的其他功能)

【讨论】:

  • JSF 2.2 是 Java EE 7 的一项功能,因此只有 WildFly 8.x 或 GlassFish 可以工作。目前,尝试使用 GlassFish 并收到此错误。
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多