0

週の初めから JSF 2.2 (MyFaces 実装 v2.2.6 および CDI の Weld v2.2.7.Final) で遊んでいますが、次の問題に直面しています。弟と一緒にフロー エントリ ポイントに直接アクセスできません。 .

例えば ​​:

私の webapp には、データベースにレコードを作成することを許可する「作成」という名前のフローが含まれています。http://my.domain/webapp/create/create.jsfブラウザのアドレス バーにURL を入力できるようにしたいと考えています。

そうすると、ページが正しくレンダリングされず、次のログがサーバーに表示されます

ログ : WELD-001303 スコープ タイプ javax.faces.flow.FlowScoped のアクティブなコンテキストがありません。

私は何を間違っていますか?それは可能であるべきではありませんか?私はそれがあることを願っています!

フローの外部で、フロー エントリ ポイントにリダイレクトする commandButton が 1 つしかないページを作成しても問題はありません。ソース コードを見ると、フローがまだアクセスされていないにもかかわらず、フローの ID が既に作成されているようです。そのため、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>

CreateController

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」ディレクティブのみが含まれます。

4

1 に答える 1

0

この例外は、ページに移動したものの、フローの中にいないことを示しています。リンクが本当にフローに入っているかどうかを確認する必要がありますが、その前に、クライアント ウィンドウ API が有効になっているかどうか (javax.faces.CLIENT_WINDOW_MODE) を確認してください。これは、faces フローがこの機能に依存しているためです。MyFaces 2.2 Faces Flow の実装は、Mojarra の実装では処理できないネストされたフローなどの複雑な状況でも非常にうまく機能し、仕様に準拠しています。

Michael Kurz ブログの JSF 2.2 ライブ シリーズには、JSF 2.2 機能に関する良い例がいくつかあります。この例は、MyFaces と Mojarra の両方の JSF 実装で機能します。Github jsfliveで Faces Flow の例を確認してください。

于 2014-12-13T06:14:21.923 に答える