Как внедрить разные подклассы как ManagedProperty JSF 2? - PullRequest
2 голосов
/ 22 сентября 2011

Я новичок в 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? Или я должен рассмотреть другой подход?

Спасибо!

1 Ответ

2 голосов
/ 22 сентября 2011

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

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

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

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

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

public void doAction(Loss loss) {
    // ...
}
...