我是 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/