@ManagedProperty не вводится

@ManagedProperty("#{sessionBean}") не вводится должным образом. sessionBean объявлен в файле JAR, и он также имеет конфигурацию лиц, совместимую с JSF 2.0. Но когда я использую

FacesContext context = FacesContext.getCurrentInstance();
sessionBean = (SessionBean) context.getApplication().evaluateExpressionGet(context, "#{sessionBean}", SessionBean.class);

Он правильно оценивает сеансовый компонент. Какова причина?

РЕДАКТИРОВАТЬ: bean-компонент, который я хочу ввести (sessionBean), находится в файле JAR, который помечен как @ManagedBean и @SessionScoped. Также JAR содержит JSF2-совместимую конфигурацию лиц в META-INF/resources.


person SashikaXP    schedule 26.09.2013    source источник
comment
Знаете ли вы, что JSF использует инъекцию зависимостей установщика для разрешения управляемых свойств? У вас есть метод setSessionBean(SessionBean sb)? Если нет - это решение. Если да - предоставьте нам более широкий контекст. В любом случае вы должны описать «не внедрить» в удобной для разработчиков форме.   -  person skuntsel    schedule 26.09.2013
comment
Да, сеттер на месте. Я не знаю, что такое более широкий контекст, кроме того, что объясняется в самом вопросе. В любом случае, я отредактировал вопрос, чтобы сделать его намного шире   -  person SashikaXP    schedule 26.09.2013
comment
Я столкнулся с проблемой, описанной в этом вопросе. Я поместил ведение журнала в установщик SessionBean. Его вообще не вызывают. Я следую этим инструкциям: balusc.blogspot.com /2011/09/. Я использую Mojarra 2.2.5 в Tomcat 7.0.50. Буду рад предоставить дополнительную информацию по запросу.   -  person daveloyall    schedule 25.01.2014
comment
Я использую аннотации javax.faces.bean.*, а не javax.annotation.*.   -  person daveloyall    schedule 25.01.2014


Ответы (2)


1.) Куда вы вводите sessionBean? Покажите нам определение класса. Является ли класс @ManagedBean?

2.) Проверьте, звонил ли сеттер setSessionBean(SessionBean sb).

3.) Является ли указанное значение в установщике null?

4.) Вы также можете попробовать сделать следующее:

@PostConstruct
private void init() {
  FacesContext context = FacesContext.getCurrentInstance();
  sessionBean = (SessionBean) context.getApplication().evaluateExpressionGet(context, "#{sessionBean}", SessionBean.class);
}

... и проверьте, правильно ли оценивается sessionBean.

person Manuel    schedule 18.10.2013

Для меня это была проблема с пакетами, у меня работал следующий импорт:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

Раньше я использовал комбинацию разных пакетов (автоматически импортируемых IDE):

import javax.faces.bean.ManagedProperty;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
person klonq    schedule 15.11.2014
comment
Действительно, javax.faces.view.ViewScoped НЕ работает для получения @ManagedProperty("#{param.id}"), вместо этого вы должны использовать javax.faces.bean.ViewScoped. Ты сделал это! - person s_bighead; 10.02.2017