Навигация по области действия потока на стартовую страницу не работает
Это не столько вопрос, сколько примечание. В 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>