3

JSFでアプリケーションを作成する必要があります。2つのスポーツイベントへのデータ入力には2つの形式がありますが、ユーザーが独自のデータ入力属性を使用して、3番目、4番目などの他のイベントを追加できる必要があります。

これらの新しいイベントのそれぞれのデータ入力フォームは、フォームの保存/編集機能のビジネスロジックと同様に、(BE DB内のすべての必要なテーブルを使用して)自動的に生成される必要があります。

これはJSFで可能ですか?はいの場合、どうすればよいですか?

4

2 に答える 2

6

はい、これは JSF 2 で可能です。これを行うにはさまざまな方法があります。

プログラムによる JSF コンポーネント ツリーへのコンポーネントの追加はサポートされていますが、いくつかの注意事項があります。1 つ目は、リクエスト処理中にランダムな時間にこれを行うことができないことです。正確なポイントは (まだ) 指定されていませんが、実際PreRenderViewEventにはこれで完全に機能します。

第二に、Mojarra 2.x の初期のバージョンには、コンポーネント ツリーに対するプログラムによる変更の量と種類を大幅に制限するいくつかのバグが含まれていました。MyFaces 以降の Mojarra バージョンは問題ありません。Mojarra を使用している場合は、この記事の執筆時点でリリースされている最新バージョンを使用すると、おそらく安全です。

3 つ目の警告は、一部のコンポーネントは動的に追加されることを許容しないということです (RichFaces DataTable は以前はそのようなコンポーネントでしたが、おそらく今でもそうです)。

基本的な例:

@ManagedBean
public class DynamicBacking implements SystemEventListener {

    @PostConstruct
    public void init() {
        Faces.getViewRoot().subscribeToViewEvent(PreRenderViewEvent.class, this));
    }

    @Override
    public void processEvent(SystemEvent event) throws AbortProcessingException {
        HtmlOutputText text = new HtmlOutputText();
        text.setValue("test");
        Faces.getViewRoot().getChildren().add(text);
    }

    @Override
    public boolean isListenerForSource(Object source) {
        return source instanceof UIViewRoot;
    }
}

もう 1 つのオプションは、Oleg Varaksin が PrimeFaces Extensions 用に作成した DynaForm コンポーネントを使用することです。動的フォームを参照してください。JSF の世界は長い間待っていました。

最後に、Luiggi が言及しているように、問題の複雑さに応じて、<ui:repeat>たとえば a にバインドされた単純なコンポーネントで十分Mapです (ただし、これは正確な要件によって異なります)。

于 2012-11-10T16:43:12.097 に答える
1

JSF CMS内でこの種のフォームを作成しました。データベースにリンクされたカスタムJSFコンポーネントを作成したため、フォームとフィールドが作成され、コンポーネントで使用されました。基本的に、通常の HTML フォームをレンダリングし、POST コンテンツをインターセプトします。もし興味があれば、ソースコードを送ることができます。

于 2012-11-10T17:42:30.970 に答える