Как внедрить разные подклассы в ManagedProperty JSF 2?

Я новичок в JSF, и мне интересно, можно ли вводить разные подклассы базового класса в качестве MangedProperty в зависимости от разных ситуаций? Например, у меня есть этот управляемый компонент:

@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 в Claim управляемый компонент. Поскольку я не могу дать двум подклассам одно и то же имя управляемого компонента и не знаю заранее, какой из них нужно внедрить, можно ли это сделать в JSF? Или есть другой подход, который я должен рассмотреть?

Спасибо!


person holic87    schedule 22.09.2011    source источник


Ответы (1)


Вы не можете и не должны.

  • Невозможно внедрить значение области запроса в качестве управляемого свойства в bean-компонент области сеанса.
  • Объекты не следует рассматривать как управляемые компоненты.

Вместо этого передайте его как аргумент метода:

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

С управляемым компонентом Claim:

public void doAction(Loss loss) {
    // ...
}
person BalusC    schedule 22.09.2011