3

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

我使用 ah: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 类,但这些都没有帮助。我不知道这是预期的行为还是错误。

希望它可以为某人节省一些我们的。

4

2 回答 2

1

这与 CDI 如何检测 bean 档案有关。当 时bean-discovery-mode="annotated",只有用bean 定义注解注解的类才会被 CDI 拾取;请注意,@Named并且@FlowScoped不在该列表中。

因此,正如您在此处记录的那样,需要bean-discovery-mode="all"设置使用 Flow 注释。

如果这是一种期望的行为,有一个规范问题可供讨论。

于 2015-06-23T19:34:12.427 回答
0

Thank you!

Of course you can always fallback to using an XML declaration for your view. Such as creating a file example/example-flow.xml with contents such as

<?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>
于 2014-11-11T21:35:09.753 回答