JSF 2 аннотации и параметры управляемого свойства

Я использую JSF 2 и Sprig 3, и я хочу перейти от использования face-config.xml к аннотациям.

старый: face-config.xml:

<managed-bean> 
    <managed-bean-name>banqueBean</managed-bean-name>
    <managed-bean-class>commun.BanqueBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>banqueService</property-name>
        <value>#{banqueService}</value>
    </managed-property>
    <managed-property>
        <property-name>banqueId</property-name>
        <value>#{param.banqueId}</value>
    </managed-property>
</managed-bean>

новый:

public class BanqueBean{
    private Banque banque;
    @ManagedProperty(name = "banqueService", value = "#{banqueService}")
    private BanqueService banqueService;
    @ManagedProperty(value = "#{param.banqueId}")
    private String banqueId;

    // setters for banqueService and banqueId

значение banqueId устанавливается с помощью:

<f:param value="#{banque.id}" name="banqueId" />

проблема в том, что при использовании face-config.xml "Система" вызывает установщик banqueService перед установщиком параметра banqueId, чтобы я мог использовать banqueService внутри метода setBanqueId.

при использовании аннотаций он вызывает установщик banqueId перед banqueService, так что я получаю значение null в качестве его значения.

почему это инвертирует вызов этого метода эвакуации?

1 ответ

Решение

Вы не должны полностью полагаться на порядок вызова метода установщика свойства. Это нигде не определено в спецификации.

Просто подключитесь в тот момент, когда JSF завершит настройку всех управляемых свойств. Это @PostConstruct аннотированный метод.

@PostConstruct
public void init() {
    banque = banqueService.find(banqueId);
}

Прекратите делать бизнес-логику в установщиках, это необходимо, только если вы все еще используете устаревшую JSF 1.1, которая не поддерживала @PostConstruct,


Не знаете о конкретной проблеме, знаете ли вы о новом JSF2? <f:viewParam>? Это может также помочь вам избавиться от этого шаблона в бобе и в конечном итоге иметь только Banque собственность и многоразовый Converter,

Смотрите также:

Другие вопросы по тегам