Apache MyFaces CODI PageBean: компонент аргумента не должен быть нулевым

В настоящее время я немного экспериментирую с Apache MyFaces CODI. Мне удалось создать простую работающую Typesafe-Navigation, используя @Page и метод действия, который возвращает класс.

Однако, когда я добавляю аннотацию @PageBean, например. MyPageBean.class возникает следующее исключение, когда я пытаюсь перейти на страницу:

exception
javax.servlet.ServletException: WELD-001324 Argument bean must not be null
root cause
org.jboss.weld.exceptions.IllegalArgumentException: WELD-001324 Argument bean must not be null

Код моей страницы:

@Page
@PageBean(MyPageBean.class)
public final class MyPage implements ViewConfig, Serializable {

}

и мой Page-Bean:

public class MyPageBean implements Serializable {
    @InitView
    protected void initView() { }

    @PrePageAction
    protected void prePageAction() { }

    @PreRenderView
    protected void preRenderView() { }
}

И метод действия, вызываемый страницей Facelets:

public Class<? extends ViewConfig> nextPage() {
    return MyPage.class;
}

Должен ли класс pageBean (MyPageBean) иметь определенную аннотацию или интерфейс? Я уже пытался использовать @Model, но это ничего не изменило.

Моя конфигурация:

  • Jave EE6 с Weld (создан с использованием Weld-архетипа)
  • Glassfish 3.1 Community Edition (поставляется с Netbeans 7)
  • JSF2.0 (Мохарра 2.1)
  • EJB 3.1
  • MyFaces CODI 0.9.4
  • RichFaces 4.0.0.Финал

Спасибо за любые советы!

С уважением, Роберт


person Robert M.    schedule 27.04.2011    source источник
comment
Для меня это работает, если я использую Weld 1.1.1 вместо поставляемой версии.   -  person Dar Whi    schedule 30.08.2011


Ответы (1)


Если вы не используете какую-либо конкретную область, она станет @Dependent.

Я предлагаю хотя бы использовать @RequestScoped (будьте осторожны, используйте не javax.faces.bean.RequestScoped, а аннотацию из CDI!)


Оки поговорил с Герхардом сейчас, так как у него больше опыта работы с CODI на Weld.

Судя по всему, это ошибка используемой вами версии Weld. Это должно работать в сварке-1.1.1.Final https://github.com/weld/core/tree/1.1.1.Final

Пожалуйста, попробуйте заменить в своей стеклянной рыбе сборку сварки-осги на связку из сварки 1.1.1.Финал.

cp target/weld-osgi-bundle-1.1.1.jar /opt/sun/glassfish/glassfish/modules/weld-osgi-bundle.jar

если это работает: кредиты идут на os890;)

person struberg    schedule 27.04.2011
comment
Спасибо за ваш ответ! Однако добавление @RequestScoped в класс MyPage или класс MyPageBean не решило проблему. Метод действия находится в bean-компоненте @Named, @ConversationScoped (один из Myfaces CODI). - person Robert M.; 27.04.2011