В бине CDI Injected Bean из суперкласса есть нулевые поля - PullRequest
0 голосов
/ 12 сентября 2018

Я довольно новичок в общей процедуре инъекции бобов. Я много гуглил, но не нашел решения своей проблемы.

Дополнительная информация

Запуск Wildfly 9.0.1 финал EJB Вер. : 3.1 CDI Верс. : 2.2.16 (SP1) JSF Вер. : 2,2

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.inject.Named;

@Named
@ViewScoped
public class UserEmailSettingsBean extends UserModuleSettingsBean {

private List<String> store;
private List<String> selectedStore;
//getters and setters, some fancy stuff...

@Override
public boolean saveProperties() {
    LOG.info("Save called");
    LOG.info(selectedStore.toString());
    LOG.info(store.toString());
    for(String prop : store) {
        getProperties().setProperty(prop, String.valueOf(false));
    }

    for(String selectedProp : selectedStore){
        LOG.info("selected: " + selectedProp + ":" + getProperties().getProperty(selectedProp) + " -> true");
        getProperties().setProperty(selectedProp, String.valueOf(true));
    }

    super.saveProperties();
    return true;
    }
}

2-й класс:

public abstract class UserModuleSettingsBean implements ModuleSettings {
    private static final long serialVersionUID = 459417872482285085L;

    protected abstract List<String> getPropertiesName();

    @Inject
    private SettingsRepository settingsRepository;

    @Inject
    private SettingsService settingsService;

    private Properties properties = new Properties();
    @Override
    public boolean saveProperties() {
        String username = SecurityContextHolder.getContext().getAuthentication().getName();
        settingsService.store(getProperties(), username);
        return (true);
    }
}

Проблема в том, что settingsService создан, однако его поле "settingsRepository" равно нулю в моем дочернем классе.

При вызове моего метода сохранения из UserEmailSettings getProperties (). SetProperty () вызывается с правильными значениями, однако никогда не сохраняется, так как settingsRepository имеет значение null. Я считаю, что это связано с неправильной инъекцией по какой-то причине.

Дайте мне знать, если мне нужно предоставить больше информации.

Вот необходимая часть настроек хранилища:

@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class SettingsService implements Serializable {

    private static final long serialVersionUID = 1695882717866085259L;

    @Inject
    SettingsRepository settingsRepository;
    //...
}

А вот здесь информация Настройки хранилища

@Stateless
public class SettingsRepository extends AbstractBaseRepository<Settings, Long> {

/**
 * Instantiates a new settings repository.
 */
public SettingsRepository() {
    super(Settings.class);
}
}

1 Ответ

0 голосов
/ 01 августа 2019

хотел сказать, что моя проблема заключалась в том, что я не вызвал функцию init () в файле settingsService для создания свойств, поэтому getProperties был пуст

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...