流程范围导航到起始页面不起作用

时间:2014-03-04 17:07:48

标签: jsf cdi jsf-2.2 flow-scope

这不是一个问题,更多的是一个注释。 使用Glassfish4,在JEE7应用程序中,我尝试使用程序化流程定义(使用@Produces @FlowDefinition注释的java类)来使用流程范围。

我使用h:commandButton导航到流程的起始页面(正如在JEE7教程示例https://svn.java.net/svn/javaeetutorial~svn/trunk/examples/web/jsf/checkout-module中所做的那样)。 当我按下按钮时,它停留在按钮所在的同一页面上,而不是进入流程的起始页面。

经过几个小时的痛苦,我意识到问题出在beans.xml中,在我的beans.xml中我有这个:

bean-discovery-mode="annotated"

根据文档(http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/beans_1_1.xsd)推荐的设置。 当我把它改成

bean-discovery-mode="all"
它开始起作用了。

CDI不会将流定义识别为带注释的类。我试图让它成为@Named类或@ApplicationScoped类,但这些没有帮助。 我不知道这是预期的行为还是错误。

希望它能将一些我们的东西保存给某人。

2 个答案:

答案 0 :(得分:1)

这与CDI如何检测bean档案有关。 bean-discovery-mode="annotated"时,CDI只会选择带bean defining annotations注释的类;请注意,@Named@FlowScoped不在该列表中。

正因为如此,正如您在此处所述,使用Flow注释需要设置bean-discovery-mode="all"

有一个spec issue可以讨论这是否是一种理想的行为。

答案 1 :(得分:0)

谢谢!

当然,您总是可以回退到为视图使用XML声明。例如使用

等内容创建文件example/example-flow.xml
<?xml version='1.0' encoding='UTF-8'?>
<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="example">
    <flow-return id="actionId" >
        <from-outcome>#{somebean.returnValue}</from-outcome>                
    </flow-return>
  </flow-definition>
</faces-config>