Как только я ввел поток Faces, я хочу выйти из него, перейдя на любую страницу, которая не является частью потока.Как выйти из потока?
Проблема в том, что поток не разрушается, если я выхожу наружу, например, через h:link
. Действительно, если я снова нажму на h:commandButton
, действие которого - flowId, я вернусь к предыдущему потоку, а не создаю новый поток.
Как выйти из потока, не указав пользователю явно на h:commandButton
, чье действие соответствует возврату узла потока? Возможно ли это?
Edit:
Давайте возьмем этот поток, например (от JEE 7 samples)
@Produces @FlowDefinition
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) {
String flowId = "flow1";
flowBuilder.id("", flowId);
flowBuilder.viewNode(flowId, "/" + flowId + "/" + flowId + ".xhtml").markAsStartNode();
flowBuilder.returnNode("taskFlowReturn1").
fromOutcome("#{flow1Bean.returnValue}");
flowBuilder.returnNode("goHome").
fromOutcome("#{flow1Bean.homeValue}");
flowBuilder.inboundParameter("param1FromFlow2", "#{flowScope.param1Value}");
flowBuilder.inboundParameter("param2FromFlow2", "#{flowScope.param2Value}");
flowBuilder.flowCallNode("call2").flowReference("", "flow2").
outboundParameter("param1FromFlow1", "param1 flow1 value").
outboundParameter("param2FromFlow1", "param2 flow1 value");
return flowBuilder.getFlow();
}
поток будет прекращено, если пользователь нажимает на
<h:commandButton id="index" value="home" action="goHome" />
или
<h:commandButton id="return" value="return" action="taskFlowReturn1" />
Но что, если пользователь нажимает на
<h:link outcome="someOutcomeUnrelatedToTheFlow"/>
Или, если пользователь изменяет URL в браузере, без удаления jfwid
? Кажется, поток не завершен, но пользователь фактически просматривает вне потока.
Это немного странно для меня: я не могу найти способ выйти из потока (и освободить бэкэнды) без специального действия от пользователя в команде Command/ButtonLink.
Btw: Я тестирую это на WildFly 8 CR1.
Можете ли вы разместить объявление о потоке? –
Да, я только что редактировал вопрос. –