1

Faces Flow を試すための簡単な POC を作成しています。

  • ページ 1: 会社のリストを表示します。ユーザーは会社 A を選択し、ページ 2 に移動します。
  • ページ 2: 選択した会社のページで、ユーザーは commandLink をクリックしてウィザードを開始し、会社 A に追加する新しい従業員を作成します。

私は@FlowScoped("addNewUsertoCompanyFlow")豆を手に入れましたMyFlowBean

その@PostConstructメソッドではMyFlowBean、会社 A に対応するオブジェクトをサービスから取得する必要があります ( @Inject)。

MyFlowBean に会社 A の ID を知らせて、サービスから取得できるようにする正しい方法は何ですか?

ありがとう。

4

1 に答える 1

3

わかりました、解決策を思いつきました。重要なのは、フロー バッキング 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>

私のフロー定義では、フロー バッキング Bean でいくつかのメソッドを呼び出して、フローのイニシャライザを定義しました。

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

次に、バッキング Bean 内のパラメーターを取得しました。

@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) {
    ...
}
于 2014-01-18T11:08:45.023 に答える