【问题标题】:WELD-001303 No active contexts for scope type javax.faces.flow.FlowScoped on direct accessWELD-001303 直接访问时范围类型 javax.faces.flow.FlowScoped 没有活动上下文
【发布时间】:2014-12-03 20:04:51
【问题描述】:

自本周初以来,我一直在使用 JSF 2.2(MyFaces 实现 v2.2.6 和 Weld v2.2.7.Final for CDI),我面临以下问题:我无法直接访问流入口点和我的兄弟。

例如:

我的 webapp 包含一个名为“create”的流,它允许在数据库中创建记录。 我希望能够在我的浏览器地址栏中输入 URL http://my.domain/webapp/create/create.jsf

当我这样做时,页面无法正确呈现,并且服务器中出现以下日志

日志:WELD-001303 范围类型没有活动上下文 javax.faces.flow.FlowScoped.

我做错了什么?不应该吗?我希望它应该!

当我在流程之外创建一个页面时,我没有任何问题,只有一个 commandButton 重定向到流程入口点。 当我查看源代码时,尽管尚未访问流,但似乎已经创建了流的 id。 这让我觉得 FlowScoped 的设计很糟糕。 此外,这样的解决方法(“启动器”页面)破坏了我自己的设计和最终用户体验。

有哪些可用的解决方案?

这里是一些示例代码:

create.xhtml

<h1>Create record</h1>
<h:form id="create-record" prependId="false">
    <label for="name">Name</label>
    <h:inputText id="name" value="#{createController.name}" />
    <h:commandButton title="Abandon" value="Abandon" id="abandon" action="returnFromCreate" immediate="true" />
    <h:commandButton title="Validate" value="Validate" id="validate" action="#{createController.create()}" />
</h:form>

创建控制器

package my.company;

import java.io.Serializable;

import javax.faces.flow.FlowScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@FlowScoped("create")
public class CreateController implements Serializable {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String create() {
        // TODO
        return "returnFromCreate";
    }
}

xhtml“启动器”

<h:form>
    <h:commandButton action="create" value="Go" />
</h:form>

create-flow.xml 只包含一个“flow-return”指令。

【问题讨论】:

  • 你需要发布一些示例代码
  • 我更新了我的初始帖子。

标签: jsf weld flow-scope


【解决方案1】:

该异常表明您已导航到该页面,但您不在流程中。您应该检查链接是否真的进入流程,但在此之前,请检查是否启用了客户端窗口 api (javax.faces.CLIENT_WINDOW_MODE),因为面孔流程依赖于此功能。 MyFaces 2.2 Faces Flow 实现工作得非常好,即使是 Mojarra 的实现无法处理的嵌套流等复杂情况,并且符合规范。

JSF 2.2 live series from Michael Kurz Blog 中有一些关于 JSF 2.2 特性的好例子。这些示例适用于 JSF 实现,MyFaces 和 Mojarra。查看Github jsflive 上的 Faces Flow 示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-27
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2014-12-25
    • 2012-06-30
    相关资源
    最近更新 更多