Ich kann den Wert eines String-Attributs eines in sessionMap gespeicherten Objekts nicht anzeigen: <h:outputText value="#{sessionScope.myObject.stringField}" />
.
Es funktioniert auch nicht, wenn ich einen Wert einer String-Variablen einem Schlüssel in der Sitzungszuordnung zuweisen.
Es funktioniert nur, wenn ich einem Schlüssel einen String-Literalwert zuweisen.JSF Wie wird der aus der Sitzung abgerufene Stringwert angezeigt?
Beispiel:
test.xhtml
Ausgänge S1 bis S3 zeigen Klassenname + Hash-Code.
Die Ausgänge s4 bis s9 zeigen nichts an.
Der Ausgang s10 zeigt das Wort "test" an.
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
</h:head>
<h:body>
<h:outputText rendered="#{not empty usuarioLogado}"
value="
s1 #{usuarioLogado}
s2 #{sessionScope.usuarioLogado}
s3 #{sessionScope['usuarioLogado']}
s4 #{usuarioLogado.nome}
s5 #{sessionScope.usuarioLogado.nome}
s6 #{sessionScope['usuarioLogado'].nome}
s7 #{nomeUsuarioLogado}
s8 #{sessionScope.nomeUsuarioLogado}
s9 #{sessionScope['nomeusuarioLogado'].nome}
s10 #{sessionScope.string_literal} ">
</h:outputText>
</h:body>
</html>
LoginBean.java
@ManagedBean
@SessionScoped
public class LoginBean {
private Usuario usuario;
@PostConstruct
public void init(){
this.usuario = new Usuario();
}
public LoginBean() {
}
//getters and setters
public String efetuarLogin(){
EntityManager em = JPAUtil.getEntityManager();
boolean existeUsuario = new UsuarioDao(em).consultarUsuario(usuario);
em.close();
FacesContext context = FacesContext.getCurrentInstance();
if (existeUsuario) {
context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
context.getExternalContext().getSessionMap().put("nomeUsuarioLogado", this.usuario.getNome());
context.getExternalContext().getSessionMap().put("string_literal", "test");
return "index.xhtml?faces-redirect=true";
}
return null;
}
}
Usuario.java
public class Usuario {
private int id;
private String nome;
private String login;
private String senha;
private String email;
public Usuario() {
// TODO Auto-generated constructor stub
}
//getters and setters
}
Ihr Englisch ist sehr gut – zero01alpha
ich vielleicht etwas offensichtlich vermissen, aber ich würde sagen, zunächst: S1 bis S3: logisch ist, Sie haben ein nicht umzusetzen ' toString() 'in Ihrem Objekt. s4 bis s9: dann ist 'nome' höchstwahrscheinlich in Ihrem Objekt leer. – Kukeltje
@Kukeltje Ich habe es nicht erwähnt, aber "Nome" ist ein Pflichtfeld. Es gibt einen früheren Validierungsschritt, so dass "Nome" niemals leer ist. tks –