2

私はJSFを初めて使用しますが、さまざまな状況に応じて、基本クラスのさまざまなサブクラスをMangedPropertyとして注入できるかどうか疑問に思っています。たとえば、私はこのマネージドBeanを持っています:

@ManagedBean
@SessionScoped
public class Claim implements Serializable {
    private Loss lossDetails; //need to inject one of two subclasses
}

そして、次の基本クラス:

public class Loss implements Serializable {
    private String lossCause;
    private String lossDescription;
}

これには2つのサブクラスがあります。

public class AutoLoss extends Loss implements Serializable {
    private List<String> vehicles;
    //...
}

public class PropLoss extends Loss implements Serializable {
    private String property;
    private boolean weatherRelated;
    //...
}

アプリケーションのJSFページで行われた選択に応じて、サブクラスの1つをマネージドBeanのlossDetailsManagedPropertyとして挿入したいと思います。Claim2つのサブクラスに同じマネージドBeanの名前を付けることはできず、どちらを注入する必要があるかを事前に知らないので、これはJSFで実行できるものですか?それとも、私が検討すべき別のアプローチがありますか?

ありがとう!

4

1 に答える 1

2

あなたはできませんし、すべきではありません。

  • セッションスコープのBeanに管理プロパティとしてリクエストスコープの値を挿入することはできません。
  • エンティティはマネージドBeanとして扱われるべきではありません。

代わりに、メソッド引数として渡します。

<h:dataTable value="#{lossManager.losses}" var="loss">
    <h:column>
        <h:commandButton value="Claim" action="#{claim.doAction(loss)}" />
    </h:column>
</h:dataTable>

ClaimマネージドBeanの場合:

public void doAction(Loss loss) {
    // ...
}
于 2011-09-22T15:28:16.233 に答える