ManagedProperty w CDI @Named bean zwraca null
Próbuję poradzić sobie z @ ManagedProperty ale bez powodzenia !
Podążałem za tym przewodnikiem i nie wydaje mi się to takie trudne. Ale mój kod po prostu nie działa!Oto mały fragment
@ManagedBean
@SessionScoped
public class LoginBean {
@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;
.
.
.
//--
@Named(value = "messagesBean")
@RequestScoped
public class MessagesBean {
@ManagedProperty(value = "#{loginBean}")
private LoginBean loginBean;
public LoginBean getLoginBean() {
return loginBean;
}
public void setLoginBean(LoginBean loginBean) {
this.loginBean = loginBean;
}
public String getUser() {
System.err.println(loginBean == null);
return loginBean.getUser().getUsername();
}
Ten kod daje mi NullPointerException, mówiący, że loginBean jest null!
Jakieś sugestie?1 answers
Mieszasz fasolę JSF z fasolą CDI. Twój LoginBean jest zarządzany przez JSF (posiada adnotację @ManagedBean
). Twój MessageBean jest CDI bean (posiada adnotację @Named
). Jeśli zmieniłeś wiadomość bean na zarządzaną przez JSF bean (zastępując @Named
na @ManagedBean
), problem powinien zostać rozwiązany(powinien działać również z dwoma CDI Bean).
CDI @Named -- > CDI @Named (działa)
CDI @Named -- > JSF @ManagedBean (działa tylko wtedy, gdy zakres injected bean jest szerszy) JSF @ ManagedBean -- > JSF @ManagedBean (działa tylko wtedy, gdy zakres injected bean jest szerszy)JSF @ManagedBean -- > CDI @Named (nie zadziała)
Ale zadbaj o klasy importu zakresu. Istnieją różne klasy dla @SessionScoped
i @RequestScoped
w zależności od rodzaju fasoli.
javax.faces.bean.SessionScoped
for @ManagedBeans
javax.enterprise.context.SessionScoped
dla CDI @ Named fasola
Ponadto do stosowania @Named
(CDI) @Inject
i do stosowania @ManagedBean
@ManagedProperty
. Jest jedna rzecz, która nie działa w CDI. Twój @ManagedProperty(value = "#{loginBean}")
dostaje pełną fasolę, ale @ManagedProperty(value = "#{loginBean.user}")
aby uzyskać "własność" fasoli działa. Nie jest to bezpośrednio możliwe w CDI z @Inject
. Zobacz zamiennik CDI dla @ ManagedProperty dla "rozwiązania"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-30 16:13:57