I use tomcat 7.0 and JSF 2.1 and I have problem when I call in my .xhtml page something like that: #{homePage.get("userName")}
I get javax.el.ELException: Caused by: java.lang.NullPointerException
at mainPacket.HomePageBean.get(HomePageBean.java:35)
I have ManagedBean like below:
@ManagedBean(name = "homePage")
@ViewScoped
public class HomePageBean {
private Map<String, Object> map;
public HomePageBean() {
map= FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
//remove unnecessary values from sessionMap
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
}
public String get(Object s){
return map.get(s).toString();
}
}
When I don’t use clear, everything works ok. But I want to clear sessionMap. How to resolve it ?
Thanks
Java is an object oriented language. It doesn’t give you a copy of the object everytime you request it. No, it gives you a reference to the object instance in memory. At the moment you invoke
Map#clear()on the session map, then themapreference which you obtained just beforehand is basically also emptied, because it points to exactly the same map instance which you just emptied!Your concrete functional requirement is nowhere mentioned in the question and the whole design in the code posted so far makes honestly no utter sense (I can’t imagine any sensible real world use case for this), so it’s hard to propose you the right solution. Best what you can get is the advice to add a nullcheck.
You should by the way be very careful with abruptly emptying the session map this way. JSF stores view scoped and session scoped managed beans in there and it’s also used by the flash scope.