Шов AutoCreate не работает?
Я пытаюсь вставить компонент шва в другой, автоматически создавая его. Но по какой-то причине вставленный компонент шва выбрасывает NPE.
XHTML
<a4j:commandLink id="cbrModal"
action="#{detailAction.showInformation(1L)}"
reRender="DetailModal"
limitToList="true">
<h:outputText value="text"/>
</a4j:commandLink>
DetailActionBean.java
@Name("detailAction")
public class DetailActionBean implements Serializable {
@In(create = true, required = false)
@Out(required = false)
private RulesValidator rulesValidator;
public void showInformation(long id) {
rulesValidator.setCheckCount(0); // rulesValidator == null here and throws npe
}
)
RulesValidator.java
@AutoCreate
@Name("rulesValidator")
@Scope(ScopeType.SESSION)
public class RulesValidator implements Serializable {
private int checkCount = 0;
public void setCheckCount(int checkCount) {
this.checkCount = checkCount;
}
}
2 ответа
Seam будет сканировать базовый пакет и искать компоненты @Name, а затем эти компоненты автоматически подключаются. Я должен поместить файл seam.properties (пустой), чтобы seam знал, какие базовые пакеты нужно сканировать. Модуль, над которым я работал, имеет свойство seam.properties, поэтому RulesValidator не сканируется и не рассматривается как компонент шва. Следовательно autoCreate dint работает.
Обязательное false означает именно это. Если он еще не существует, он не будет создан, и вы должны это проверить. Autocreate просто означает, что вам не нужно определять create true в аннотации in.
Обновление комментариев: Да, seam будет автоматически создавать компонент при внедрении, если эта аннотация задана заранее. Но вы заявляете в инъекции, что это не требуется! Вот почему шов ничего не делает. Просто удалите все свойства вашего @In, и он должен работать. Значения по умолчанию - это то, что вы хотите.