Ola a todos e obrigado antecipadamente pela atenção,
Eu tenho uma superclasse usuário de onde eu herdo contador e proprietário e estou usando notações do hibernate através da estrategia “strategy=InheritanceType.SINGLE_TABLE”.
Minha dificuldade é que estou tentando realizar o login atraves da superclasse, descobrir se é instanceof de Contador ou Proprietario, so que o JSF parece não reconhecer a minha superclasse para ser usada no managedBean.
Segue código abaixo
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=“tipo_usuario”,
discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(“usu”)
public class Usuario implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8317918183498048165L;
@Id
private String cpf;
private String rg;
private String nome;
@OneToOne(cascade=CascadeType.ALL)
private Endereco endereco;
private String senha;
public Usuario() {
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
</code>
Classe Contador que extende usuario
import java.io.Serializable;
import java.util.List;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
@Entity
@DiscriminatorValue(“cont”)
public class Contador extends Usuario implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5147775612439546148L;
private String crc;
@OneToMany(targetEntity=Empresa.class, mappedBy="contador",fetch=FetchType.EAGER)
private List<Empresa> listEmpresa;
public Contador(){
}
public String getCrc() {
return crc;
}
public void setCrc(String crc) {
this.crc = crc;
}
public List<Empresa> getListEmpresa() {
return listEmpresa;
}
public void setListEmpresa(List<Empresa> listEmpresa) {
this.listEmpresa = listEmpresa;
}
}
Classe proprietario extends usuario
@Entity
@DiscriminatorValue(“prop”)
public class Proprietario extends Usuario implements Serializable{
/**
*
*/
private static final long serialVersionUID = 3624660381176899371L;
@OneToMany(targetEntity=Empresa.class, mappedBy="proprietario", fetch=FetchType.EAGER)
private List<Empresa> listEmpresa;
public Proprietario(){
}
public List<Empresa> getListEmpresa() {
return listEmpresa;
}
public void setListEmpresa(List<Empresa> listEmpresa) {
this.listEmpresa = listEmpresa;
}
}
ManagedBean da minha superclasse que esta dando problemas:
import java.io.IOException;
import javax.annotation.ManagedBean;
import javax.faces.bean.*;
import javax.faces.context.FacesContext;
import com.dao.UsuarioDao;
import com.model.Contador;
import com.model.Proprietario;
import com.model.Usuario;
@ManagedBean
@SessionScoped
public class UsuarioBean {
private Usuario usu = new Usuario();
private UsuarioDao usuDao = new UsuarioDao();
private Contador contador = new Contador();
private Proprietario proprietario = new Proprietario();
public Usuario getUsuario() {
if(this.usu == null){
this.usu = new Usuario();
}
return usu;
}
public void setUsuario(Usuario usuario) {
this.usu = usuario;
}
public Contador getContador() {
return contador;
}
public void setContador(Contador contador) {
this.contador = contador;
}
public Proprietario getProprietario() {
return proprietario;
}
public void setProprietario(Proprietario proprietario) {
this.proprietario = proprietario;
}
public void logar(Usuario usu){
usuDao.logar(usu.getCpf(),usu.getSenha());
String page = null;
if(usu instanceof Proprietario){
proprietario = (Proprietario) usu;
page = "pgprop.jsf";
}else if (usu instanceof Contador) {
contador = (Contador) usu;
page = "pgcont.jsf";
}else{
page = "pgerror.jsf";
}
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(page);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Minha classe dao para usuario:
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.model.HibernateUtil;
import com.model.Usuario;
public class UsuarioDao {
public Usuario logar(String Cpf, String Senha){
Usuario usu;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction t = session.beginTransaction();
Query query = session.createQuery("from Usuario where cpf = :cpf and senha = :senha");
query.setParameter("cpf", Cpf);
query.setParameter("senha", Senha);
usu = (Usuario)query.uniqueResult();
System.out.println("Nome: "+usu.getNome());
t.commit();
session.close();
return usu;
}
}
Minha tela de login:
identar texto pre-formatado em 4 espaços
<h:body>
<r:panel title=“Sistema de Escrituração Contabil 1.0”>
Sistema de Escrituração Contabil 1.0
</r:panel>
<h:form>
<h:outputLabel value=“Login:” for=“cpf”/>
<h:inputText id=“cpf” value="#{usuarioBean.usu.cpf}"/>
<h:outputLabel value=“Senha:” for=“senha”/>
<h:inputSecret id=“senha” value="#{usuarioBean.usu.senha}"/>
<h:outputLabel value=“Tipo de Usuario:” for=“tpusu”/>
<h:selectOneMenu>
<f:selectItem itemLabel=“Contador” itemValue=“cont”/>
<f:selectItem itemLabel=“Proprietario” itemValue=“prop”/>
<f:selectItem itemLabel=“Administrador” itemValue=“adm”/>
</h:selectOneMenu>
<h:commandButton value=“Logar” action="#{usuarioBean.logar()}"/> <h:commandButton value=“Cancelar” />
E esse é o erro que encontro quando tento realizar o login:
exception
javax.servlet.ServletException: /index.xhtml @20,55 value="#{usuarioBean.usu.cpf}": Target Unreachable, identifier 'usuarioBean' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.el.PropertyNotFoundException: /index.xhtml @20,55 value="#{usuarioBean.usu.cpf}": Target Unreachable, identifier ‘usuarioBean’ resolved to null
com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046)
javax.faces.component.UIInput.validate(UIInput.java:976)
javax.faces.component.UIInput.executeValidate(UIInput.java:1249)
javax.faces.component.UIInput.processValidators(UIInput.java:712)
javax.faces.component.UIForm.processValidators(UIForm.java:253)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.el.PropertyNotFoundException: Target Unreachable, identifier ‘usuarioBean’ resolved to null
org.apache.el.parser.AstValue.getTarget(AstValue.java:97)
org.apache.el.parser.AstValue.getType(AstValue.java:81)
org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:171)
com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046)
javax.faces.component.UIInput.validate(UIInput.java:976)
javax.faces.component.UIInput.executeValidate(UIInput.java:1249)
javax.faces.component.UIInput.processValidators(UIInput.java:712)
javax.faces.component.UIForm.processValidators(UIForm.java:253)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.55 logs.
Pelo que eu vi estou usando as EL de forma correta.
Alguem sabe o que esta acontecendo?