如何将不同的子类注入ManagedProperty JSF 2?

时间:2011-09-22 15:21:34

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

我是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;
}

其中有两个子类:

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托管bean中注入一个子类作为Claim ManagedProperty。既然我不能给这两个子类提供相同的托管bean名称,并且我不知道哪个需要注入,那么这可以在JSF中完成吗?或者我应该考虑采用不同的方法吗?

谢谢!

1 个答案:

答案 0 :(得分: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) {
    // ...
}