【问题标题】:Flow scope navigation to start page does not work流范围导航到起始页不起作用
【发布时间】:2014-03-04 17:07:48
【问题描述】:

这与其说是一个问题,不如说是一个笔记。 使用 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 类,但这些都没有帮助。 我不知道这是预期的行为还是错误。

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

【问题讨论】:

    标签: jsf cdi jsf-2.2 flow-scope


    【解决方案1】:

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

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

    有一个spec issue 开放讨论这是否是一种期望的行为。

    【讨论】:

      【解决方案2】:

      谢谢!

      当然,您总是可以回退到为您的视图使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2020-03-02
        • 2020-07-31
        • 2013-04-26
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多