2013-09-28 5 views
2

У меня есть компонент со списком глобальных данных в @ApplicationScoped, как это:Несогласованность с @ManagedProperty

@ApplicationScoped 
@ManagedBean 
public class GlobalData 
{ 
    private List data = new ArrayList(); 

    //getter and setterss goes here.. 

    public void addSomeData(Object item) { data.add(item); } 
} 

также у меня есть @ViewScoped компонент, который ссылается GlobalData через @ManagedProperty, как это:

@ManagedBean 
@ViewScoped 
public class SomePageController 
{ 
    @ManagedProperty(value="#{globalData}" 
    private GlobalData theGlobalData; 
    //also public getter and setter of theGlobalData 
} 

забавная вещь происходит, когда в SomePageController я хочу, чтобы добавить элемент в список GlobalData, как это:

public void someUIAction() 
{ 
    SomeItem item = bussinesProcess(); 
    theGlobalData.addSomeData(item); 
} 

, потому что каждый раз, когда вызывается someUIAction, theGlobalData указывает на совершенно новый экземпляр с пустыми данными !!!! я могу подтвердить это, потому что я добавил некоторые Логгина информацию, как это:

public void someUIAction() 
{ 
    SomeItem item = bussinesProcess(); 
    theGlobalData.addSomeData(item); 
    System.out.println(theGlobalData.toString()); 
} 

, а затем я получил следующий вывод:

[email protected] 
[email protected] 
[email protected] 
...... 

новый экземпляр на каждый запрос, я гугле но только информацию, я мог получаете с this guy с подобной проблемой, до сих пор я также пытался он решение не повезло = (

** ** Информация услуги для покупателей:. им развивается TomEE 1.5.2 веб-профиля Wich включает в себя Apache MyFaces также я проверил, что все АННОТАЦИИ взяты из javax.faces.bean пакета

ответ

1

Что произойдет, если вы импортировали @ApplicationScoped аннотацию от неправильного пакета, такие как CDI-х javax.enterprise.context, что и большинство Иды предложить в качестве 1-го варианта автозавершения , Поскольку вы управляете bean-компонентами JSF @ManagedBean, вам необходимо убедиться, что вы также используете область управляемого компонента из одного и того же API управления бобами.

import javax.faces.bean.ApplicationScoped; 
import javax.faces.bean.ManagedBean; 

Когда JSF управляемого компонент не имеет действительную аннотацию определяемый, то он по умолчанию @NoneScoped, который является в данном случае в самом деле совершенно новым экземпляр на каждом EL-разрешении, такие как @ManagedProperty.

:
+0

добавил +1, так как его довольно распространенная ошибка, но я просто chequed все анонаты, и все они из пакета javax.faces.bean, честно говоря, я надеялся, что это было причиной ... = S – Harima555

Смежные вопросы