我从一周开始就玩JSF 2.2(MyFaces实施v2.2.6和Weld v2.2.7.Final for CDI),我面临以下问题:我无法直接访问和我哥哥一起进入流程。
例如:
我的网络应用包含一个名为'创建'它允许在数据库中创建记录。
我希望能够在浏览器地址栏中输入网址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>
CreateController
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&#34;启动器&#34;
<h:form>
<h:commandButton action="create" value="Go" />
</h:form>
create-flow.xml只包含&#34; flow-return&#34;指令。
答案 0 :(得分:0)
该异常表示您已导航到该页面,但您不在该流程内。您应该检查链接是否真正进入流程,但在此之前,检查客户端窗口api是否已启用(javax.faces.CLIENT_WINDOW_MODE),因为faces flow依赖于此功能。 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的示例。