这不是一个问题,更多的是一个注释。 使用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类,但这些没有帮助。 我不知道这是预期的行为还是错误。
希望它能将一些我们的东西保存给某人。
答案 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>