Я играю с JSF 2.2 (реализация MyFaces v2.2.6 и Weld v2.2.7.Final для CDI) с начала недели и столкнулся со следующей проблемой: я не могу напрямую получить доступ к точке входа потока с моим братом .
Например :
Мое веб-приложение содержит поток с именем «создать», который позволяет создать запись в базе данных. Я хотел бы иметь возможность ввести URL-адрес http://my.domain/webapp/create/create.jsf
в адресную строку браузера.
Когда я это делаю, страница отображается неправильно, и на сервере появляется следующий журнал
log: WELD-001303 Нет активных контекстов для типа области видимости javax.faces.flow.FlowScoped.
Что я делаю не так ? Разве это не должно быть возможно? Я надеюсь, что это должно!
У меня нет проблем, когда я создаю страницу вне потока, имеющую только одну команду CommandButton, перенаправляющую на точку входа потока. Когда я смотрю исходный код, кажется, что идентификатор для потока уже создан, несмотря на то, что к потоку еще не обращались. Это заставляет меня думать, что FlowScoped плохо спроектирован. Более того, такой обходной путь (страница «лаунчер») нарушает мой собственный дизайн и работу конечного пользователя.
Какие есть доступные решения?
Вот пример кода:
create.xhtml
<h1>Create record</h1>
<h:form id="create-record" prependId="false">
<label for="name">Name</label>
<h:inputText id="name" value="#{createController.name}" />
<h:commandButton title="Abandon" value="Abandon" id="abandon" action="returnFromCreate" immediate="true" />
<h:commandButton title="Validate" value="Validate" id="validate" action="#{createController.create()}" />
</h:form>
Создать контроллер
package my.company;
import java.io.Serializable;
import javax.faces.flow.FlowScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@FlowScoped("create")
public class CreateController implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String create() {
// TODO
return "returnFromCreate";
}
}
xhtml "Панель запуска"
<h:form>
<h:commandButton action="create" value="Go" />
</h:form>
create-flow.xml содержит только директиву «flow-return».