ich mein Benutzerinfo in eine Session-Bean wie folgt aus:Session Bean in JSP-Seite
@Component
@Scope(value="session" , proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserInfos {
public List<Integer> roles;
public Integer idUser;
public List<Integer> getRoles() {
return roles;
}
public void setRoles(List<Integer> roles) {
this.roles = roles;
}
public Integer getIdUser() {
return idUser;
}
public void setIdUser(Integer idUser) {
this.idUser = idUser;
}
}
In meinem Controller habe ich die Bohne in der Sitzung als Attribut:
@Controller
public class FooController {
@Autowired
private UserInfos userInfos;
@RequestMapping(value="/foo/login")
public String login_foo(HttpServletRequest request){
....
userInfos.idUser = ...
userInfos.roles = ...
request.getSession().setAttribute("userInfos", userInfos);
....
}
}
Aber wenn Ich versuche, es in jsp
Seite zu verwenden, der Wert von ${ sessionScope.userInfos.idUser }
ist immer null
.
Wenn ich versuche,
(${ sessionScope.userInfos }) - (${ sessionScope.userInfos.idUser })
ich diese bekam:
([email protected]) -()
So wie kann ich die Eigenschaften eines Session-Bean in JSP-Seite?
Da, wenn ich in meinem Controller debuggen der Wert userInfos.idUser
ist nicht null oder leer.
Die einzige Erklärung, die ich mir vorstellen kann, ist, dass Spring möglicherweise Ihre Bean über ein dynamisches Proxy-Objekt als Proxy verwendet. Da Spring jedoch immer erwartet, dass sich die Objekte wie ** JavaBeans ** verhalten (private Variablen, öffentliche Getter und Setter), werden die öffentlichen Methoden abgefangen, während die öffentlichen Variablen dies nicht tun (weil sie dies nicht können). Denken Sie also daran, die variablen Mitglieder immer als ** privat ** zu betrachten. –