Sempre tive dúvidas como ter em um único form do JSF, duas ou mais opções com base em uma condicao XYZ, algo como: o botão alterar/cadastrar só vão aparecer com base na requisição do usuário/cliente. Há varias formas de fazer isso. Mas, em um belo dia, estou navegando na documentação do JSF, e do nada vejo algo interessante sobre o assunto e resolvi testar e deu certo.
Então hoje vou mostrar como não ter dois formulários cadastrar.jsp e alterar.jsp. Será um único formulário (formulario.jsp) e com base no que for solicitado, ele terá um botão cadastrar ou alterar visivel para o usuario.
Lets go…
Starting…
Primeiramente estarei limitando o post à JSF, então configuração de conexão com banco de dados, e outros tópicos relacionado não farão parte. Vou levar em consideração que você tem sua app rodando e quer usar este recurso. Aqui temos o Hibernate como nosso frameworks de persistência.
A seguir tem o projeto que criei para como teste:
A seguir temos o meu face-config.xml
Development
Vamos colocar mão na massa e fazer as devidas configurações.
Passo 1
Alterar as classes de persistência, é o primeiro ponto. Então adicione o método responsável por alterar como o nosso:
publicvoid atualizar(TUsuario tusuario){
begin();
getSession().merge(tusuario);
try{
commit();
}catch (HibernateException e) {
rollback();
}}
O método begin() vem de uma classe generica DAO, minha. Veja:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
publicclass DAO {
privatestaticfinal ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
privatestaticfinal SessionFactory sessionfactory = new AnnotationConfiguration()
.configure().buildSessionFactory();
publicstatic Session getSession() {
Session session = (Session) threadlocal.get();
if (session == null) {
session = sessionfactory.openSession();
threadlocal.set(session);
}
return session;
}
publicvoid begin() {
getSession().beginTransaction();
}
publicvoid commit() {
getSession().getTransaction().commit();
}
publicvoid rollback() {
getSession().getTransaction().rollback();
}
publicvoid close() {
getSession().clear();
threadlocal.set(null);
}
Passo 2
Levando em conta que você vai editar o usuário a partir de uma tabela onde exibi todos os usuarios, então você vai precisar inserir na classe de persistencia o seguinte método:
publicList listaUsuarios(){
Query query = getSession().createQuery(“from TUsuario tu order by tu.nome asc”);
List<TUsuario> lista = query.list();
return lista;
}
Passo 3
Feito isso va para a classe controladora, aquela de comunicação com o JSF, e insira o seguinte método
public TUsuario getEditorDelete(){
TUsuario tus = (TUsuario) model.getRowData();
return tus;
}
Agora já sabemos, qual linha será editada, observe o que os métodos a seguir fazem:
public String editar(){
TUsuario tu = getEditorDelete();
setTusuario(tu);
return“editarus”;
}
public String editado(){
TUsuarioDAO tusdao = new TUsuarioDAO();
tusdao.atualizar(tusuario);
return“editadous”;
}
O primeiro dele é chamado quando clicamos no link editar, daí ele vai para o formulario.jsp e o segundo método editado() é quando clica no botão submit para fazer a persistencia e alterar o valor daquele objeto.
Passo 4
Agora vamos alterar.jsp nossa pagina formulario.jsp para exibir o botão correto com base na requisição do usuário.
No seu formulário os botões submit deixando desse modo:
Observe que apenas adicionamos um atributo que é o rendered onde tem o teste, caso seja null é porque será um novo usuário, porem se for diferente é porque será alterado, nessa condição apenas um dos botões serão exibidos. Vejam uns testes que fiz, ao executar minha aplicação:
Vou ficando por aqui, espero que o post tenha sido útil.Preparei este post tem um tempinho já porém, só agora conseguir publicar, pois a lista é grande :).
Depois de um curto tempo de off (ferias), estou de volta, com baterias recarregadas. O primeiro post do ano, será sobre a instalação e configuração do OpenJDK no Ubuntu, eu sempre tive vontade, de usar o “pinguim” como ambiente de desenvolvimento default, cheguei usar por algumas semanas, mas depois acabava voltando para o Windows, pois a maioria dos projetos ja estavam no Windows, mais que 50% e isso forçava eu usar o Windows como default, porem quando fui trabalhar na 4Linux, tive que tirar isso, pois era so Linux, e fiquei “mal-acostumado” e hj ja migrei todo meu ambiente de desenvolvimento e projetos TI para o Linux. E escolhi o Ubuntu como distribuição. Se vc está começando ou querendo usar o Linux como ambiente de desenvolvimento aproveite o post e veja como é fácil instalar o OpenJDK e ter o Java rodando na sua maquina.Aproveitei e relacionei com outros posts que ja fiz com Linux, em outros momentos aqui no blog.
A seguir teremos os passos como instalar. Preste bastante atenção antes de executar, estamos certo que todos os passos descritos aqui atingiremos o objetivo final.
abra o terminal
digite o comando abaixo para instalação do openJDK, você precisa usar o comando sudo
Aperte a tecla enter e responda com y ou deixe em branco apertando enter e aguarde a instalação
Ao termino vamos verificar o java instalado, digitando o comando java -version
Agora vamos fazer, um “Hello World” somente para ter certeza que o Java está compilando nossos arquivos .java. Para isso abra um editor de texto, pode ser o VIM, ou o gedit. Vou usar o gedit que está Applications ==> Acessories ==> gedit. Abaixo segue meu codigo no gedit:
Feito, isso salve na pasta do usuário, para saber onde está esta pasta basta digitar pwd . Observe que a minha está em /home/meu_nome, a sua deve ser semelhante com o seu nome.
Se você dar o comando ls veremos os arquivos que estão nesta, pasta e um deles é o HelloOpenJDK.java veja:
Vamos compilar e executar: javac HelloOpenJDK.java e java HelloOpenJDK
Lembre-se que o Linux faz diferença entre maiusculo e minusculo, então ao dar o auto-complete para o arquivo tenha certeza digitou a primeira letra conforme foi salvo.
Se listar verá o .class:
Executando agora:
Pronto! Assim temos o Java – OpenJDK instalado na máquina em um ambiente Ubuntu/Linux.
Mais um final do ano na “porta” e como sempre um post sobre o balanço do ano corrente. Nos anos anteriores, eu sempre fiz dois posts, um para falar dos acertos e erros, e outro das “promessas” para o ano seguinte e compartilhando alguns materiais de auxilio, para aqueles que vão construir seu RoadMAP. Este ano vou fazer um pouco diferente, vou compartilhar aqui com vocês leitores(que estão na estrada comigo há um bom tempo) como foi meu 2010, acertos/erros, mishaps, e como estou terminando 2010, porém não vou deixar de dar um help para aqueles que ainda estão buscando formas de como documentar os planos para 2011 (aprendi uma coisa: à medida que evoluímos na vida como todo, e a forma que planejamos as nossas metas seja qual for ela, tendem a mudar) e no final vou apresentar um vídeo que achei interessante e recomendo a todos, pois é um bom momento para reflexão.
Sinta-se à vontade em compartilhar como foi o seu 2010 😉
lets go…
Meu 2010
– Iniciei o ano bem motivado com o plano de 2010 em mãos e nesse inicio foi à preparação para fazer o intercâmbio inicialmente para o Canadá, buscando melhorar o inglês, principalmente na parte de “conversação continua”, pronúncia, além da experiência internacional.
– Em seguida, concluir o meu projeto como escritor para editora Ciência Moderna e já foi uma meta atingida;
– Em 05/Maio foi o lançamento do meu livro Guia do exame SCJP, dia este inesquecível.
– Lancei o simulado em português gratuito para SCJP – SimSCJP, um modo que encontrei de ajudar a comunidade;
– Em Junho, comecei a ter problemas com minha viagem para o Canadá com o visto e não conseguir embarcar e dai mudanças no plano de 2010; (plano de contingência)
– Reorganizei minha viagem para fora do país com o objetivo de dar o UP no English, “posso mudar de destino, mas não o objetivo, sou responsável de escrever minha própria história” e ai decidir ir para Nova Zelândia – Relato da viagem;
– Entrei em uma sociedade com um amigo, para prestar uma Consultoria à uma empresa no interior da Bahia, trabalhamos média de 2-3 meses, mas finalizamos o projeto em seguida, ambos não tinha como focar o tempo que o projeto estava pedindo. Porém, foi uma experiência excelente, pois tive a oportunidade de viver bastante à área de negócio dentro de TI no dia-dia e na pele.
– Recebi um convite do Eduardo Guerra da MundoJ (antiga Revista MundoJava) para escrever um artigo, para uma das edições, fiquei bastante feliz, pois não estava nos planos e tocamos o projeto e artigo publicado – Ed.43
– Acabei fazendo o desligamento da IBM, a qual estava desde Outubro/2008 e fui viajar para NZ, sem preocupação com retorno;
– Ao retornar fiz um artigo para InfoQ com o apoio e revisão do Pedro Mariano da Caelum, mais uma felicidade, pois escrever para InfoQ não tem preço;
– Ao chegar ao Brasil, ainda não tinha pensando quando voltar a trabalhar, pois estava focado em reorganizar minha vida pessoal e descansar mais um pouco eram 5 anos sem férias. E estava analisando as propostas e entre as opções, optei por vim morar em SP e ir para 4Linux como Consultor Java em projetos JEE.
– No finalzinho do ano, surgiu uma nova oportunidade para trabalhar no laboratório de pesquisa e desenvolvimento com Java da HP em POA e acabei aceitando a nova proposta e já estou de mudança e daí tive que fazer meu desligamento em tão pouco tempo da 4Linux.
Bem, finalizo o ano satisfeito e feliz com 2010, acho que 2010 foi melhor que 2009, uma vez que tive mais surpresas que o ano anterior e passei boa parte do ano tendo um plano B para não perder as oportunidades. Tive que tomar decisões “seguras” no menor tempo possível, e buscar um plano B para aquilo que de fato foi colocado pela vida no meu caminho, realmente traz muitos pontos positivo em nossa vida, um deles é a experiência adquirida. Como todo técnico, saio só um pouco “triste” por não ter estudado algumas tecnologias que eu tinha prometido aprender este ano, mas fica para inicio de 2011, se não estudei deve ter sido por um bom motivo. Enfim, foi um ano de muitos viravoltas, de momentos bons e ruins também, hoje ao olhar e ver o que aconteceu parece que foi fácil, mas como os momentos aconteceram em fases diferentes e circunstâncias que nem sempre favorecem, na hora ficamos sem saber qual decisão tomar ou como resolver. Mas, será um ano inesquecível, conheci pessoas bem diferentes, pude “amadurecer” um pouco mais tanto profissionalmente quanto na minha vida pessoal, aprender com os erros e não esquecer os acertos.
Esse foi o meu 2010 e o seu?
As minhas principais metas 2010:
– Tirar certificação: SCWCD, Linux LPI 1 – não conseguir, por falta de tempo e imprevistos que consumiram meu tempo =/. Fail
– Melhorar o inglês: apesar que usava no dia-dia na IBM e por estudar, sempre precisamos melhorar, já que não existe “fim”. Posso riscar essa aqui de como conseguir dar o UP, minha experiência na Nova Zelândia foi incrível, e nunca tinha usado o inglês como usei na NZ.
– Projetos Pessoais TI: artigos, publicar o livro Guia do exame SCJP. Meta atingida
– Ler 8 livros técnicos, só conseguir ler 3 livros técnicos e outros 2 não técnicos. Fail preciso melhorar isso.
– Aprimorar conhecimento com frameworks JEE. Meta atingida.
– Fazer amizade com o “Pinguim”: foi um ponto positivo, parei de usar o Linux como alternativo e agora é meu ambiente de desenvolvimento primário, e quando estive na 4linux isso ajudou mais ainda atingir essa meta. Meta atingida.
– TDD: não estava na meta, mas entrou de ultima hora, pois precisei aprender para usar no ultimo projeto que participei e tive que aprender o ABC e usar de forma “eficiente” no menor time possível. A coisa foi tão seria que hoje estou viciado em TDD.
– Estudar “novas tecnologias”: Android, ruby on rails, Vraptor. Não conseguir, por falta de tempo. Fail
Esse ano fiz menos palestras, e não fui a nenhum evento técnico(JavaOne, JavaDay etc). Mas, fica para 2011.
Para 2011: draft.
Ainda não listei todas minhas metas para o próximo ano, pois estas estão sempre de acordo com meu trabalho, pois não adianta muito eu ter metas que vão contra ao meu job, porém algumas já posso dar um ok que estarão presente:
– melhorar o inglês com foco para negócios;
– planejar intercâmbio para Australia;
– Aprimorar estudos e experiência com TDD e BDD;
– frameworks JEE: Vraptor, jboss seam etc.
– Novas tecnologias: Android, Ruby on rails
– praticar Wing Chun
– Tirar certificação Java: ainda não decidir qual tirar.
– Evento de TI: ainda não sei qual irei, mas tenho que ir.
O blog
Para o blog foi excelente, o nro de visitantes tem aumentado, estamos hoje na casa de 3-4 mil visitas/mês, algo que em 2009, não passava de 1 mil. Fico feliz, por isto está acontecendo, pois iniciei o projeto em 2008 e nunca imaginei que ele chegaria tão longe. Pois, o carinho e feedback dos leitores é o que mantém ele vivo, para nos blogueiros não há nada melhor que receber um comentário independente do tipo dele, e tenho recebido muitos de elogio,sugestões etc.O ponto que considero importante é que o blog tem contribuído para o desenvolvimento do próximo. Isso é o que me faz dispor de algumas horas do meu tempo para escrever para os leitores. Em 2011, espero trazer algumas novidades que tenho tido nas ultimas semanas, vamos ver se vai rolar.
Bem, eu não posso deixar de falar das metas, planos de 2011. Bem, ainda estou fazendo meu RoadMap 2011 nessas semanas finais, pois gosto sempre de começar pouco antes do natal e terminar antes do ano novo. Sempre aproveitando o que não foi alcançado no ano presente, e vejo se é valido levar para 2011. Insiro o que deve ser novo, já que minha vida mudou em 2010, isso reflete diretamente no que planejar para 2011. Um exemplo será meu novo Job, novas tecnologias, novos projetos pessoais e aonde quero chegar a médio prazo. São pontos desse tipo que você vai montando seu roadmap, mas não esqueça busque montar sempre com “os pés no chão” e reavaliando onde está e onde pode de fato chegar até o final do próximo ano.
As mudanças de 2010 me fizeram mudar até alguns documentos que crio para poder avaliar minhas metas a cada mês ou em um determinado período. Ano passado compartilhei outros docs, que podem ainda serem validos, depende do seu roadmap. Abaixo os disponibilizo para download, para aqueles que não sabem como montar, tenham uma idéia, claro que isso é bem pessoal cada um monta o seu, esse é um dos que tenho, pois como estou envolvido com muitas coisas profissionais, preciso ter uma forma de controlar e saber o que já fiz o que está atrasado, e o que tenho de fazer. Fora que tenho uma vida pessoal, e também deve ser controlada e separada um pouco da vida profissional.
Montei o doc a seguir com alguns exemplos para ajudar quem está no zero x zero.
Este vídeo, eu assistir em uma das aulas de um curso de especialização que fiz este ano, achei muito interessante e consigo identificar alguns momentos da vida que já passei dentro dele. E sugiro para todos que estão montando seu roadmap, assista o vídeo antes de escrever suas metas.
A mensagem que deixo
A mensagem que queria deixar com vocês leitores, amigos é agradecer cada um, pelo apoio, incentivo, para eu hoje estar aqui podendo escrever este post com prazer. Uma frase que eu ouvir de um amigo e não esqueço: “Você é responsável por escrever sua própria história, ninguém escreve ela por você”. Por mais que pareça impossível o momento, busque sempre acreditar em seus sonhos e que você será capaz de transformar o que parece ser impossível em possível. Não será fácil, mas ao atravessar a “porta”, vai poder respirar mais suave e dizer “Valeu”.
Abraços, Feliz ano novo!!! Encontro vocês em 2011 ; )
Em preparativo dos posts para 2011 e das novidades para o próximo ano, resolvi listar os 12 posts mais visitados neste ano. Caso tenha perdido algum, confira quem são eles:
Atingimos o número de 184 posts, desde os técnicos e não técnicos, nesses dois anos de trabalho, iniciado desde março/2008. Este ano foram 55 novos posts( técnicos, carreira, inglês). Espero escrever mais em 2011 😉
Vou ficando por aqui e semana que vem retorno com o ultimo post do ano, sobre metas/plano de carreira e retrospectiva.
Neste post vou mostrar como gerar um relatório usando Ireport de onde as informações vem do BD. Além disso usaremos o Hibernate para conexão. É bem comum uma aplicação o cliente querer algum tipo de relatório. Para gerar os relatorios vamos usar Ireport e o JasperReport. Fiz uma pesquisa rapida na internet e vi alguns posts eram limitados à criar relatórios sem banco de dados, alguns com banco de dados, porem confusos de entender eu sentir dificuldade de compreender,levando em conta que nunca tivesse visto o assunto. E no “mundo real”, se gera relatório de uma base de dados, que na maioria das vezes é um banco de dados. Bom eu tentarei ser pratico no post e a teorica abordada aqui será o suficiente para saber o que significa se deseja se aprofundar no assunto sugiro usar o velho Google e participar das comunidades ou comprar um livro.
Outro ponto é que neste post será um Java Project normal, em outro post veremos como fazer isso em JEE em um projeto JSF.
Lets go..
Iniciando
Vou levar em conta, que você já tem um BD e uma tabela de onde deseja extrair a informação. Essa é a minha:
Requisitos:
Você precisa fazer o download do Ireport. A versão mais recente é 3.7.6 neste momento que escrevo o post.
copiar os .jars que estã na pasta ext do Ireport para o projeto Java . Se for JEE, adicionar na pasta lib. Não esquecer do .jar para o banco de dados caso os dados relatório venha de um banco de dados, que é o mais real e comum.
commons-beanutils
commons-collections
commons-digester
commons-logging
groovy-all
iText
poi
jasperreports
Veja o que é Ireport & JasperReport (de forma simples e direta):
Ireport = é uma especie de IDE para criação do layout do seu relatório, ou seja, que cara vai ter e o que vai ter no seu relatório. E é aqui que fazemos a conexão com o banco de dados e consequentemente as tabelas e onde informamos quais colunas de uma tabela vai aparecer no relatório. Ele gera um arquivo .jrxml que será lido por JasperReport.
JasperReport = É uma API que permite nossa classe Java estabelecer uma “conversa” com o nosso layout-relatório. Isso vem a ser util para que sua aplicação Java, gere relatórios em um único ambiente. O usuário não percebe que foi gerado por algo “fora” Java(isso para aqueles que sabem o que é Java).
Na pratica como acontece:
– o desenvolvedor vai lá e cria o layout do relatório com base no proposito deste e põe logomarca da empresa e os dados que devem aparecer. Não precisa ser um webdesigner para desenhar o layout. E é no Ireport que falamos de onde vem a info se será de um BD ou não.
-No JasperReport apenas setamos onde está o layout .jrxml do Ireport e em seguida informamos e é aqui que informamos para qual tipo vamos exportar o relatório: PDF,XML, HTML, TEXT. Podemos dizer que será gerado um arquivo em um local especifico ou se for um JEE, que vai ser carregado pelo Browser.
Note: os nomes das variaveis da classe devem estar iguais aos nomes dos campos (fields) no layout do relatório.
Mão na massa
Vamos colocar mão na massa por partes:
Parte 1: ir para o Ireport (não vou enumerar porque vai ficar zuado a formatação)
vamos primeiro criar um arquivo no Ireport e seguir as instruções do assistente que é bem simples:
Na parte de banco de dados basta informar os de conexão do banco.
Feito isso temos o o relatório na tela e podemos edita-lo. Observe que já foi montando com os dados do banco de dados, ou seja, com os nomes da coluna e nos devidos locais, isso acontece no Ireport mais recente, as vezes antigas não faziam isso.
Parte 2: No Eclipse
Agora no Eclipse precisamos criar um projeto. Este será um Java Project.
Passos:
-Crie o Bean (os nomes entre o bean e os fields no layout devem ser os mesmos)
-Crie conexão com banco de dados (usamos o Hibernate)
-Crie um método List na classe DAO usando HQL com a query que deseja;
-importar para o projeto do eclipse o arquivo jrxml
-crie a classe main com exportando o relatório
Abaixo veja a estrutura do meu projeto
note: é recomendavel colocar o .jrxml em um package para terceiro não ter acesso, mas coloquei fora só para mostrar que é possível rodar fora sem problemas algum.
A classe Bean
@Entity
@Table(name=“tusuario”)
publicclass Usuario {
@Column
private String nome;
@Column
private String email;
@Id
privateintid;
//gets/sets omitidos
Gerando o relatório
Essa é a classe principal que de fato faz gerar o relatório em PDF, pegando o layout definido no Ireport o JasperReport faz a conversão, veja:
obs. No primeiro argumento temos o caminho do layout do relatorio gerado pelo ireport, parametro pode ser null e criamos um data source com o conteudo da lista que tem o resultado HQL