Расход в зависимости от внешнего параметра?

Я строю простой POC для экспериментов с Faces Flow.

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

По сюжету у меня есть @FlowScoped("addNewUsertoCompanyFlow") боб MyFlowBean,

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

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

Благодарю.

1 ответ

Решение

Хорошо, я нашел решение. Ключ был не в том, чтобы использовать компонент поддержки потока @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) {
    ...
}
Другие вопросы по тегам