2014-01-17 7 views
0

Я строю простой POC, чтобы поэкспериментировать с Faces Flow.Поток зависит от внешнего параметра?

  • страница 1: отображает список компаний. Пользователь выбирает компанию А, затем переходит на страницу 2.
  • страница 2: на выбранной странице компании, пользователь нажимает на commandLink для запуска мастера создания нового сотрудника будет добавлена ​​в компании А.

опережать сцены я получил @FlowScoped("addNewUsertoCompanyFlow") боб MyFlowBean.

В своем методе @PostConstructMyFlowBean должен получить объект, соответствующий компании A, из службы (@Inject).

Что такое правильный способ сообщить MyFlowBean об идентификаторе компании A, чтобы он мог получить его из службы?

Спасибо.

ответ

2

Хорошо, я придумал решение. Ключом было не использовать компонент backstream bean @PostConstruct, а скорее использовать инициализатор потока, где я могу захватить параметры запроса.

Поэтому я использую некоторые дополнительные материалы в форме, которая начнет свой поток:

<h:form id="myForm" prependId="false"> 
    <h:commandLink value="Enter myFlow" action="my-flow"/> 
    <h:inputHidden id="parameter" name="parameter" value="8"/> 
</h:form> 

В моем определении потока я определил инициализатор для потока, вызывая некоторый метод в вспомогательном потоке боба

@Produces @FlowDefinition 
public Flow defineFlow(@FlowBuilderParameter FlowBuilder flowBuilder) { 
String flowId = "my-flow"; 
    flowBuilder.id("", flowId); 
    flowBuilder.initializer("#{myFlowBean.startFlow()}"); 
    ... 
} 

Затем я захватил параметр внутри бэкэнда.

@Named 
@FlowScoped("my-flow") 
public class MyFlowBean implements Serializable { 

    public void startFlow() { 
     String parameter = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("parameter"); 
     //now do sthg with the parameter, such as fetching data from an injected service 
     .... 
    } 
} 

Конечно, это также можно сделать это на уровне определения потока

flowBuilder.initializer("#{trainingFlowBean.startFlow(param['parameter'])}"); 

и просто параметр в методе startFlow

public void startFlow(String parameter) { 
    ... 
} 
Смежные вопросы