Шов AutoCreate не работает? - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь вставить компонент шва в другой, автоматически создавая его. Но по какой-то причине вставленный компонент шва выбрасывает 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 ]

1 голос
/ 16 февраля 2012

Seam будет сканировать базовый пакет и искать компоненты @Name, а затем эти компоненты автоматически подключаются. Я должен поместить файл seam.properties (пустой), чтобы seam знал, какие базовые пакеты нужно сканировать. Модуль, над которым я работал, имеет свойство seam.properties, поэтому RulesValidator не сканируется и не рассматривается как компонент шва. Следовательно autoCreate dint работает.

1 голос
/ 15 февраля 2012

Обязательный false означает именно это.Если он еще не существует, он не будет создан, и вы должны это проверить.Autocreate просто означает, что вам не нужно определять create true в аннотации in.

Обновление для комментариев: Да, шов будет автоматически создавать компонент при внедрении, если эта аннотация задана заранее.Но вы заявляете в инъекции, что это не требуется!Вот почему шов ничего не делает.Просто удалите все свойства вашего @In, и он должен работать.Значения по умолчанию - это то, что вы хотите.

...