Навигация по области действия потока на стартовую страницу не работает

Это не столько вопрос, сколько примечание. В Glassfish4 в приложении JEE7 я пытался использовать область действия потока, используя программное определение потока (класс Java, аннотированный @Produces @FlowDefinition).

Я перешел на начальную страницу потока с помощью команды a 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 ответа

Это связано с тем, как CDI обнаруживает архивы bean-компонентов. когда bean-discovery-mode="annotated"только классы, аннотированные аннотациями, определяющими компоненты, выбираются CDI; Обратите внимание, что @Named а также @FlowScoped не в этом списке

Из-за этого, как вы описали здесь, использование аннотаций Flow требует bean-discovery-mode="all" установить.

Есть вопрос спецификации, открытый для обсуждения, если это желаемое поведение.

Спасибо!

Конечно, вы всегда можете использовать декларацию 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>
Другие вопросы по тегам