2013-09-11 3 views
2

Мой прецедент: пользователь выбирает вопросник в форме. Когда форма отправляется, начинается поток лиц, чтобы отобразить вопросы вопросника.Как отправить данные в поток лиц?

Чтобы отправить вопросник в поток, в компоненте потока я вставляю CDI bean страницы, которая содержит форму.

Интересно, есть ли другие способы отправки вопросника в поток. Если есть несколько способов, что лучше?

+0

FYI, на самом деле есть лишь несколько статей о том, как дело с Faces Flow, поэтому я создал тот, который, надеюсь, охватывает основные вопросы: http://blog.oio.de/2014/02/12/a-comprehensive-example-of-jsf-faces-flow/ – tasel

ответ

2

Вы можете передать параметры через форму и получить их в методе инициализации, вызванном при инициализации вашего потока.

Form (просто замените параметр inputHidden с любыми вы используете, чтобы выбрать опросник)

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

Flow

@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 the questionnaire 
    .... 
    } 
} 

this answer Смотреть больше Детальная информация

+0

Я пытаюсь чтобы он работал с потоком, определенным в файле XML, но я не могу определить инициализатор на : этот метод никогда не выполняется. Вы попробовали? – user1643352

+0

В другом ответе вы ссылаетесь в конце этого ответа, вы используете инициализатор с параметром, но в javadoc написано, что выражение для вызова для инициализатора должно ссылаться на метод с нулевым аргументом. – user1643352

+0

Извините, я никогда не пытался определить поток, используя XML-файл. –

0

Дополнение к «thomas.g» s полезный ответ:

У меня была такая же проблема, но не смог зафиксировать его с помощью hiddenInput подхода. Несмотря на атрибут prependId = "false", мой идентификатор и имя скрытого поля ввода были изменены с помощью элемента p: dataTable. Проблема может быть исправлена ​​с F: пары elemtent внутри часа: commandLink элемент:

<h:commandLink value="Enter myFlow" action="my-flow" > 
    <f:param name="parameter" value="8"/> 
</h:commandLink> 

Я надеюсь, что это может быть полезным для кого-то с подобной проблемой.

0

Это может быть сделано в файле XML-потока с использованием инициализатора тег

<initializer> 
     #{myFlowBean.startFlow()} 
    </initializer> 

назвать ваш метод инициализации в потоке области видимости боб