jsf - 如何注入(inject)不同的子类作为 ManagedProperty JSF 2?

标签 jsf dependency-injection jsf-2 managed-bean

我是 JSF 的新手,我想知道是否可以根据不同的情况将基类的不同子类作为 MangedProperty 注入(inject)?例如,我有这个托管 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;
}

它有两个子类:

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 页面上所做的选择,我想将其中一个子类作为 lossDetails ManagedProperty 注入(inject)到 Claim 托管 bean 中。由于我不能为这两个子类提供相同的托管 bean 名称,而且我事先不知道需要注入(inject)哪一个,这是否可以在 JSF 中完成?还是我应该考虑其他方法?

谢谢!

最佳答案

你不能也不应该。

  • 无法将请求范围内的值作为托管属性注入(inject)到 session 范围内的 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) {
    // ...
}

关于jsf - 如何注入(inject)不同的子类作为 ManagedProperty JSF 2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7517257/

相关文章:

java - 在 Dagger 中的 @Provides 方法内使用注入(inject)

java - Weld 和测试 jar

java - handleNavigation 在 PhaseListener 中不起作用

java - Spring MVC 与 JSF

java - 为什么请求facelet时会多次调用BackingBean方法?

java - EJB、hibernate、spring和JSF有什么区别?

java - Guice FactoryBuilderModule 生成工厂时出现 NullPointerException

JSF2.0 与 <f :ajax> only works once

jsf-2 - 使用 CDI 而不是 @ManagedBean : UnproxyableResolutionException because super class has no no-args constructor

java - 如何让h的required属性为:inputText depend on certain set of values from h:selectOneMenu?