Oi, estou desenvolvendo um sistema Java web usando Hibernate, Maven, MySQL, Spring framework, Spring Security, JSF, Primefaces, Html e Css. Tenho uma classe Usuario e por herança dela uma classe Empresa. O usuário empresa faz o seu cadastro e o login no sistema, isso está ok, mas quero desenvolver uma tela onde ele possa editar os seus dados e salvar.
O que eu conseguir até agora:
Consigo pegar o login do usuário logado;
Tenho um método que faz a busca por login no banco e me traz um objeto empresa.
O que eu não sei fazer:
Pegar o login do usuário logado e jogar dentro do meu método de busca por login;
Trazer as informações na tela de edição.
Acabei criando um Bean chamado UsuarioCtrl e outro é o EmpresaCtrl que é o meu principal, mas nem se se precisa. Meio perdido estou eu, =(
Segue o meu código:
CLASSE USUARIO
package br.com.protoforma.entidade;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique=true)
private Integer idUsuario;
@Column(nullable=false, unique=true, length=40)
private String login;
@Column(nullable=false, length=40)
private String senha;
@Column(nullable=false)
private Boolean ativo;
@Column(nullable=false)
private String tipo;
//Construtor
public Usuario (){
}
…Getters e setters, hashCode…
CLASSE EMPRESA
package br.com.protoforma.entidade;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Empresa extends Usuario implements Serializable {
@Column(length=18, nullable=false, unique=true)
private String cnpj;
@Column(length=30)
private String ie;
@Column(nullable=false)
private String razaoSocial;
@Column(nullable=false)
private String nomeFantasia;
private String endereco;
private String bairro;
@Column(length=9)
private String cep;
@Column(length=30)
private String numeroCasa;
@Column(length=50)
private String complemento;
@Column(nullable=false, length=30)
private String telefone;
@Column(length=30)
private String celular;
@Column(nullable=false, length=130)
private String email;
private String nomeContatoEmpresa;
@Column(columnDefinition="text(2100)", length=2100)
private String missaoEmpresa;
@Column(columnDefinition="text(2100)", length=2100)
private String visaoEmpresa;
@Column(columnDefinition="text(2100)", length=2100)
private String descricaoEmpresa;
@ManyToOne(optional=false)
@JoinColumn
private CondPagamento condPagamento;
@ManyToOne(optional=false)
@JoinColumn
private Cidade cidade;
@ManyToOne(optional=false)
@JoinColumn
private Estado estado;
@ManyToOne(optional=false)
@JoinColumn
private RamoAtividade ramoAtividade;
@ManyToOne(optional=false)
@JoinColumn
private Setor setor;
@Temporal(value=TemporalType.TIMESTAMP)
private Date dataCadastroEmpresa= new java.sql.Date(System.currentTimeMillis());
@OneToMany(mappedBy="empresa")
private List<Projeto> projetoEmp;
//Construtor da classe
public Empresa (){
}
…Getters e setters, hashCode…
CLASSE EMPRESADAO
package br.com.protoforma.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import br.com.protoforma.controller.MensagemUtil;
import br.com.protoforma.entidade.Empresa;
@Repository
public class EmpresaDAO {
@PersistenceContext
EntityManager em;
public EmpresaDAO(EntityManager em) {
this.em = em;
}
public EmpresaDAO() {
}
public Usuario buscarLogin(String login) {
try {
Query q = em.createQuery("Select usu from Usuario usu where usu.login=:loginParam");
q.setParameter("loginParam", login);
q.setMaxResults(1);
return (Usuario) q.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Transactional
public Empresa buscarLoginEmpresa(String login) {
try {
Query q = em.createQuery("Select usu from Usuario usu where usu.login=:loginParam");
q.setParameter("loginParam", login);
q.setMaxResults(1);
return (Empresa) q.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Transactional
public Empresa buscarLoginEmp(String login) {
try {
Query q = em.createQuery("Select emp from Empresa emp where emp.login=:loginParam");
q.setParameter("loginParam", login);
q.setMaxResults(1);
return (Empresa) q.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Transactional
public Empresa buscarLoginUsuEmp(String login) {
try {
Query q = em.createQuery("Select usu, emp from Usuario usu, Empresa emp where usu.idUsuario = emp.idUsuario and usu.login=:loginParam");
q.setParameter("loginParam", login);
q.setMaxResults(1);
return (Empresa) q.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
}
EMPRESA SERVICE
package br.com.protoforma.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import br.com.protoforma.controller.MensagemUtil;
import br.com.protoforma.dao.DAOException;
import br.com.protoforma.dao.EmpresaDAO;
import br.com.protoforma.entidade.Empresa;
import br.com.protoforma.mail.EmailJava;
@Service
public class EmpresaService {
@Autowired
EmpresaDAO empresaDAO;
@Transactional
public Empresa buscarPorCnpjEmp1(String cnpj){
Empresa empCNPJ = new Empresa();
empCNPJ = empresaDAO.buscarCNPJ(cnpj);
return empCNPJ;
}
@Transactional
public Empresa buscarLogin(String login)throws ServiceException {
Empresa emp = new Empresa();
emp = empresaDAO.buscarLoginEmp(login);
return emp;
}
}
CLASSE EMPRESACONTROLLER
package br.com.protoforma.controller;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.web.jsf.FacesContextUtils;
import br.com.protoforma.dao.CidadeDAO;
import br.com.protoforma.dao.EstadoDAO;
import br.com.protoforma.entidade.Cidade;
import br.com.protoforma.entidade.Empresa;
import br.com.protoforma.entidade.Estado;
import br.com.protoforma.entidade.Usuario;
import br.com.protoforma.service.EmpresaService;
import br.com.protoforma.service.ServiceException;
@SessionScoped
@Controller(value=“empresaCtrl”)
public class EmpresaController implements Serializable {
@PersistenceContext
EntityManager em;
private Usuario usuario;
private Estado estado;
private Cidade cidade;
@Autowired
private EmpresaService empresaService;
@Autowired
private CidadeDAO cidadeDAO;
@Autowired
private EstadoDAO estadoDAO;
private UsuarioController usuController = new UsuarioController();
private Empresa empresa = new Empresa();
private List<Empresa> empresaList;
private List<Estado> estados;
private List<Cidade> cidades;
private String cnpj;
private String login;
public EmpresaController(){
empresa = new Empresa();
SecurityContext context = SecurityContextHolder.getContext();
if(context instanceof SecurityContext){
Authentication authentication = context.getAuthentication();
if(authentication instanceof Authentication){
empresa.setLogin(((User) authentication.getPrincipal()).getUsername());
}
}
}
public void editar1(Empresa empresa){
this.empresa = empresa;
}
public String editar2(Empresa empresa){
this.usuController.usuempedit(empresa);
return "dadosempresa.xhtml";
}
public void editar(){
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext external = context.getExternalContext();
String login = external.getRemoteUser();
String caso1 =(String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
System.out.println(caso1);
System.out.println(login);
//Empresa emp = empresaService.buscarLogin(login);
//System.out.println(emp);
//this.empresa = emp;
}
public void test(){
// SecurityContext context = SecurityContextHolder.getContext();
// if (context instanceof SecurityContext){
// Authentication authentication = context.getAuthentication();
// if (authentication instanceof Authentication){
// usuario.setLogin(((User)authentication.getPrincipal()).getUsername());
// usuario.setNome(((User)authentication.getPrincipal()).getUsername());
Object usuarioLogado = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username;
if (usuarioLogado instanceof UserDetails ) {
username= ( (UserDetails)usuarioLogado).getUsername();
} else {
username = usuarioLogado.toString();
}
System.out.println(username);
//String login = username.toString();
// Empresa emp = empresaService.buscarLogin(username);
// System.out.println(emp.toString());
}
CLASSE USUARIOCONTROLLER
package br.com.protoforma.controller;
import br.com.protoforma.entidade.Empresa;
import br.com.protoforma.entidade.Usuario;
import br.com.protoforma.service.EmpresaService;
import br.com.protoforma.service.UsuarioService;
import br.com.protoforma.util.FacesContextUtil;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
@SessionScoped
@Controller(value=“usuarioCtrl”)
public class UsuarioController implements Serializable {
@Autowired
private UsuarioService usuarioService;
private Empresa empresa = new Empresa();
private Usuario usuario;
private String login;
public UsuarioController() {
usuario = new Usuario();
SecurityContext context = SecurityContextHolder.getContext();
if (context instanceof SecurityContext){
Authentication authentication = context.getAuthentication();
if (authentication instanceof Authentication){
usuario.setLogin(((User)authentication.getPrincipal()).getUsername());
}
}
}
@Transactional
public Usuario usuempresa(){
Usuario usulogado = new Usuario();
String login = getLoginUsuarioLogado();
System.out.println(login);
System.out.println("Retorna Usu 4:");
Session session = FacesContextUtil.getRequestSession();
Query query = session.createSQLQuery("Select * from usuario where login=:loginParam");
query.setParameter("loginParam", login);
query.setMaxResults(1);
usulogado = (Usuario) query.uniqueResult();
System.out.println(usulogado);
return usulogado;
}
public String usuemplog(){
String loginemp = getLoginUsuarioLogado();
System.out.println(loginemp);
System.out.println("Retorna Usu 5:");
Empresa empLogin = new Empresa();
System.out.println(loginemp);
empLogin = usuarioService.buscarLoginEmp(loginemp);
String msg = empLogin.getCnpj();
System.out.println(msg);
return empLogin.getEmail();
}
public void usuarioporlogin(){
Usuario usuLogin = new Usuario();
System.out.println(login);
usuLogin = usuarioService.buscarLogin(login);
String msg = usuLogin.getSenha();
System.out.println(msg);
}
//Esse metodo quando uso o usuarioCtrl eu digito o login e ele me traz o CNPJ, está funcionando
public void usuparaemp(){
Empresa empLogin = new Empresa();
System.out.println(login);
empLogin = usuarioService.buscarLoginEmp(login);
String msg = empLogin.getCnpj();
System.out.println(msg);
}
public Empresa usuempedit(Empresa empresa){
Empresa empLogin = new Empresa();
System.out.println(empresa.getLogin());
empLogin = usuarioService.buscarLoginEmp(empresa.getLogin());
String msg = empLogin.getCnpj();
System.out.println(msg);
return empLogin;
}
public Empresa editaremp(){
Empresa empLogin = new Empresa();
System.out.println(login);
empLogin = usuarioService.buscarLoginEmp(login);
String msg = empLogin.getCnpj();
System.out.println(msg);
return empLogin;
}
public void editaremp1(){
this.empresa = editaremp();
}
public void editar(){
Empresa empLogin = new Empresa();
System.out.println(login);
empLogin = usuarioService.buscarLoginEmp(login);
String msg = empLogin.getCnpj();
System.out.println(msg);
this.usuario = empLogin;
}
PAGINA XHTML
?xml version=“1.0” encoding =“UTF-8”?>
<div id="direitamenu" class="9u 12u(mobile)">
<div class="12u 12u(mobile)">
<header class="major">
<h:outputText value="Seja Bem Vindo #{usuarioController.usuario.login}" />
<h2>Informações de Sua Empresa</h2>
</header>
</div>
<div class="row">
<div class="1u">
</div>
<div class="10u 12u(mobile)">
<h:form id="formEmp" prependId="false">
<p:messages id="msgs" autoUpdate="true"/>
<div class="divform" align="center" >
<p:panelGrid columns="2" id="gridemp">
<h:outputLabel class="outputLabelform" value="CNPJ:" for="cnpj"/>
<p:inputMask id="cnpj" class="campoform" value="#{empresaCtrl.empresa.cnpj}" mask="99.999.999/9999-99">
<stella:validateCNPJ/>
</p:inputMask>
<h:outputLabel class="outputLabelform" value="Inscrição Estadual:" for="ie"/>
<p:inputText id="ie" value="#{empresaCtrl.empresa.ie}" class="inscricao"></p:inputText>
<p:outputLabel class="outputLabelform" value="Razão Social:" for="razaoSocial"/>
<p:inputText id="razaoSocial" class="campoform" value="#{empresaCtrl.empresa.razaoSocial}"
requiredMessage="Por favor, escreva o nome da Razão Social da empresa"></p:inputText>
<p:outputLabel class="outputLabelform" value="Nome Fantasia:" for="nomeFantasia"/>
<p:inputText id="nomeFantasia" class="campoform" value="#{empresaCtrl.empresa.nomeFantasia}"></p:inputText>
<h:outputLabel class="outputLabelform" value="Ramo de Atividade (Cod. CNAE):" for="ramoAtividade"/>
<p:selectOneMenu id="ramoAtividade" class="camposel" value="#{empresaCtrl.empresa.ramoAtividade}" converter="#{ramoAtividadeConverter}"
filter="true" filterMactchMode="contains">
<f:selectItem itemValue="" itemLabel="Selecione" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{ramoAtividadeCtrl.ramoAtividadeList}" var="ramo" itemLabel="#{ramo.descricaoRamoAti}"></f:selectItems>
</p:selectOneMenu>
<p:outputLabel class="outputLabelform" value="Setor:" for="setor"/>
<p:selectOneMenu id="setor" class="camposel" value="#{empresaCtrl.empresa.setor}" converter="#{setorConverter}">
<f:selectItem itemValue="" itemLabel="Selecione" noSelectionOption="true"></f:selectItem>
<f:selectItems value="#{setorCtrl.setorList}" var="set" itemLabel="#{set.descricaoSetor}"></f:selectItems>
</p:selectOneMenu>
<p:outputLabel class="outputLabelform" value="Estado:" for="estado"/>
<p:selectOneMenu id="estado" class="camposel" value="#{empresaCtrl.empresa.estado}" converter="#{estadoConverter}"
requiredMessage="Por favor, selecione o estado"
filter="true" filterMactchMode="contains">
<f:selectItem itemValue="" itemLabel="Selecione o estado" noSelectionOption="true"/>
<f:selectItems value="#{empresaCtrl.estados}" var="e" itemValue="#{e}" itemLabel="#{e.nomeEstado}"/>
<p:ajax update="cidade" listener="#{empresaCtrl.carregarCidades()}"/>
</p:selectOneMenu>
<p:outputLabel class="outputLabelform" value="Cidade:" for="cidade"/>
<p:selectOneMenu id="cidade" class="camposel" value="#{empresaCtrl.empresa.cidade}" converter="#{cidadeConverter}"
filter="true" filterMactchMode="contains" >
<f:selectItem itemValue="" itemLabel="Selecione a cidade" noSelectionOption="true"/>
<f:selectItems value="#{empresaCtrl.cidades}" var="c" itemLabel="#{c.nomeCidade}" itemValue="#{c}"/>
</p:selectOneMenu>
<p:outputLabel class="outputLabelform" value="Bairro:" for="bairro"/>
<p:inputText id="bairro" class="campoform" value="#{empresaCtrl.empresa.bairro}"></p:inputText>
<p:outputLabel class="outputLabelform" value="Logradouro:" for="endereco"/>
<p:inputText id="endereco" class="campoform" value="#{empresaCtrl.empresa.endereco}"
placeholder="Rua, Avenida, Rodovia"/>
<p:outputLabel class="outputLabelform" value="Número:" for="numero"/>
<p:inputText id="numero" class="campoform" value="#{empresaCtrl.empresa.numeroCasa}" />
<p:outputLabel class="outputLabelform" value="Complemento:" for="complemento"/>
<p:inputText id="complemento" class="campoform" value="#{empresaCtrl.empresa.complemento}"></p:inputText>
<p:outputLabel class="outputLabelform" value="CEP:" for="cep"/>
<p:inputMask id="cep" class="campoform" value="#{empresaCtrl.empresa.cep}" mask="99999-999">
</p:inputMask>
<p:outputLabel class="outputLabelform" value="Telefone:" for="telefone"/>
<p:inputMask id="telefone" class="campoform" value="#{empresaCtrl.empresa.telefone}" mask="(9?9)9999-99999" />
<p:outputLabel class="outputLabelform" value="Celular:" for="celular"/>
<p:inputMask id="celular" class="campoform" value="#{empresaCtrl.empresa.celular}" mask="(9?9)9999-99999"/>
<p:outputLabel class="outputLabelform" value="e-mail:" for="email"/>
<p:inputText id="email" class="campoform" value="#{empresaCtrl.empresa.email}" label="email">
<f:validator validatorId="custom.emailValidator"/>
</p:inputText>
<p:outputLabel class="outputLabelform" value="Login (mínimo de 8 dígitos):" for="login"/>
<p:inputText id="login" class="campoform" value="#{empresaCtrl.empresa.login}" >
<f:validateLength minimum="8"/>
</p:inputText>
<p:outputLabel class="outputLabelform" value="Senha:" for="passowordfeedback"/>
<p:password id="passowordfeedback" class="campoform" value="#{empresaCtrl.empresa.senha}" feedback="true"
promptLabel="Digite a senha" weakLabel="Moderada"
goodLabel="Boa" strongLabel="Excelente" />
<p:outputLabel class="outputLabelform" value="Nome para Contato:" for="nomeContato"/>
<p:inputText id="nomeContato" class="campoform" value="#{empresaCtrl.empresa.nomeContatoEmpresa}"
placeholder="Responsável por este cadastro"/>
<h:outputLabel class="outputLabelform" value="Missão da empresa:" for="missao"/>
<p:inputTextarea id="missao" class="campotext" value="#{empresaCtrl.empresa.missaoEmpresa}" rows="6"
placeholder="Pode ser preenchido após o cadastro."/>
<h:outputLabel class="outputLabelform" value="Visão da empresa:" for="visao"/>
<p:inputTextarea id="visao" class="campotext" value="#{empresaCtrl.empresa.visaoEmpresa}" rows="6"
placeholder="Pode ser preenchido após o cadastro."/>
<h:outputLabel class="outputLabelform" value="Descrição da empresa:" for="descri"/>
<p:inputTextarea id="descri" class="campotext" value="#{empresaCtrl.empresa.descricaoEmpresa}" rows="6"
placeholder="Pode ser preenchido após o cadastro."/>
</p:panelGrid>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<p:commandButton value="Editar" actionListener="#{usuarioCtrl.editar}" update="@form" validateClient="true"/>
</div>
</h:form>
<h2>Teste de Método</h2>
<h:form>
<h:inputText class="inputlogin" value="#{usuarioCtrl.login}" />
<div id="botoeslogin">
<br />
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<div id="botaologin"><h:commandButton id="botlogin" action="#{usuarioCtrl.editaremp1()}" value="Editar" >
</h:commandButton>
</div>
</div>
</h:form>
</div>
<div class="1u">
</div>
</div>
</div>
</div>