sou novo no forum , entrei hoje, se algum puder me ajudar eu agradeço, estou desenvolvendo um sistema para postar materias de pescarias e preciso que quando o usuario clicar no botao “detalhes” seja redirecionado para outra pagina trazendo as informacoes daquela materia especifica , eu consegui fazer , mais com o p:dialog, queria que carregasse uma nova pagina, abaixo o codigo atual :
use o atributo action do commandButton e no seu metodo do manegedBean você retorna uma string com o nome da página desejada, por exemplo:
<p:commandButton action="#{bean.metodo()}"/>
public String metodo(){
//operações desejadas
retrun "pagina.xhtml";
}
você tambem pode especificar a página diretamente no atributo:
<p:commandButton action="pagina.xhtml"/>
C
copadjic
danilovteodoro:
use o atributo action do commandButton e no seu metodo do manegedBean você retorna uma string com o nome da página desejada, por exemplo:
<p:commandButton action="#{bean.metodo()}"/>
public String metodo(){
//operações desejadas
retrun "pagina.xhtml";
}
você tambem pode especificar a página diretamente no atributo:
<p:commandButton action="pagina.xhtml"/>
Sim , ate ai blz , consegui tambem redirecionar , mas e para pegar somente com aquele id, por exemplo no meu banco tenho 3 materias criadas eu quero que ao clicar no botao detalhes, trazesse tudo somente referente aquela materia ,
desde ja agradeco !
D
danilovteodoro
Nesse caso eu usaria o objeto materia como uma classe model , criaria uma uma classe de controlhe que possui o obj materia para ser meu bean e anotaria ele como @SessionScoped para ficar na sessão.
Nao sei que tecnologia você está usando mas imagino que tenha um metodo q retorna um obj materia do banco de dados.
@SessionScoped@ManagedBean(name="mat")publicclassMateriaCtrl{privateMateriamateria;@InjectprivateDaoMateiradaoMateria;//classe de persistenciapublicMateriaCtrl(){materia=newMateria();}publicMateriagetMateria(){returnmateria;}publicvoidsetMateria(Materiamateria){this.materia=materia;}publicDaoMateiragetDaoMateria(){returndaoMateria;}publicvoidsetDaoMateria(DaoMateiradaoMateria){this.daoMateria=daoMateria;}publicStringmetodo(intid){materia=daoMateria.getMateriaById(id);//metodo que retorna por Id return"pagina2.xhtml";}}
<divclass="dialogomatt2"><h:outputTextvalue="Local da matéria: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Cidade: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.cidade.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Estado: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.cidade.estado.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Data da pescaria: "/><h:outputLabelvalue="#{mat.materia.data}"styleClass="localmat2"><f:convertDateTimepattern="dd/MM/yyyy"/></h:outputLabel><br/><br/><divclass="dialogomatt"><h:outputTextvalue="#{mat.materia.descricao}"escape="false"styleClass="dialogomatt"/></div>
ViniGodoy
Tópico movido para desenvolvimento web.
aprendizweb
Blz!!
É o seguinte fiz um sistema que faz exatamente isso que vc quer, funciona assim!!
Em seu Bean vc cria um metodo visualizarDados, ou outro nome de sua preferência.
public String visualizarDados(){
return "visualizarDados";// no return vc informa a página onde serão impresso os dados, neste
// caso visualizarDados.xhtml
}
este será o metodo que vc chamará no action do botão Detalhes em sua tabela. pronto simples assim!!
C
copadjic
danilovteodoro:
Nesse caso eu usaria o objeto materia como uma classe model , criaria uma uma classe de controlhe que possui o obj materia para ser meu bean e anotaria ele como @SessionScoped para ficar na sessão.
Nao sei que tecnologia você está usando mas imagino que tenha um metodo q retorna um obj materia do banco de dados.
@SessionScoped@ManagedBean(name="mat")publicclassMateriaCtrl{privateMateriamateria;@InjectprivateDaoMateiradaoMateria;//classe de persistenciapublicMateriaCtrl(){materia=newMateria();}publicMateriagetMateria(){returnmateria;}publicvoidsetMateria(Materiamateria){this.materia=materia;}publicDaoMateiragetDaoMateria(){returndaoMateria;}publicvoidsetDaoMateria(DaoMateiradaoMateria){this.daoMateria=daoMateria;}publicStringmetodo(intid){materia=daoMateria.getMateriaById(id);//metodo que retorna por Id return"pagina2.xhtml";}}
<divclass="dialogomatt2"><h:outputTextvalue="Local da matéria: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Cidade: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.cidade.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Estado: "/><h:outputLabelvalue="#{mat.materia.pesqueiro.cidade.estado.nome}"escape="false"styleClass="localmat"/><br/><br/><h:outputTextvalue="Data da pescaria: "/><h:outputLabelvalue="#{mat.materia.data}"styleClass="localmat2"><f:convertDateTimepattern="dd/MM/yyyy"/></h:outputLabel><br/><br/><divclass="dialogomatt"><h:outputTextvalue="#{mat.materia.descricao}"escape="false"styleClass="dialogomatt"/></div>
Tentei mais nao foi assim , vou passar o codigo melhor, nao sabia que tinha opcao Code, abaixo o xhtml
protectedEntityManagermanager;protectedClass<?>tipo;protectedStringnomeTabela;publicGenericDAO(EntityManagermanager,Class<?>tipo){this.manager=manager;this.tipo=tipo;this.nomeTabela=JPAUtil.getTableName(tipo);}publicvoidcriar(Tt){manager.persist(t);manager.flush();}@SuppressWarnings("unchecked")publicTler(intcodigo){return(T)manager.getReference(tipo,codigo);}publicvoidremover(Tt){manager.remove(t);manager.flush();}publicvoidatualizar(Tt){manager.merge(t);manager.flush();}@SuppressWarnings("unchecked")publicList<T>listarTodos(intpagina,intquantidadePorPagina){Queryquery=manager.createQuery("SELECT x FROM "+nomeTabela+" x");query.setFirstResult(pagina);query.setMaxResults(quantidadePorPagina);returnquery.getResultList();}
peco desculpas por estar te incomodando !
quando clicou en detalhes nao trouxe nada , eu tenho 3 materias cadastradas e quando clicar queria que fosse para aquela pagina materiadetalhada.xhtml trazendo as informacoes da materia que ele clicou !
ja procurei em varios lugar nao achei
C
copadjic
aprendizweb:
Blz!!
É o seguinte fiz um sistema que faz exatamente isso que vc quer, funciona assim!!
Em seu Bean vc cria um metodo visualizarDados, ou outro nome de sua preferência.
public String visualizarDados(){
return "visualizarDados";// no return vc informa a página onde serão impresso os dados, neste
// caso visualizarDados.xhtml
}
este será o metodo que vc chamará no action do botão Detalhes em sua tabela. pronto simples assim!!
fiz , funcionou a parte do redirecionamento, porem assim vai mostrar todas as materias que tenho eu precisaria que mostrasse so que a que a pessoa clicou !
aprendizweb
Então, da forma que te falei vc deveria listar os dados em uma tabela, selecionar uma linha e acionar o botão detalhes para redirecionar para a visualização daquela linha, como na imagem abaixo.
C
copadjic
era isso mesmo que eu precisava , so que quando clico em detalhes ele traz as informcoes de todas as linhas entendeu ?
fiz assim :
o data do prime funciono tudo normal , o painel na tabela de materia detalhada tbm , so que nao traz nenhum informacao apareceu so o painel em branco
aprendizweb
vai ver falta o corrigir o atributo rowKey em sua tabela, por exemplo se na sua entidade Materia estiver private int idmateria seu atributo de ser rowKey="#{mat.idmateria}"
e dentro de seu panel deixa assim com um unico atributo e testa.
vai ver falta o corrigir o atributo rowKey em sua tabela, por exemplo se na sua entidade Materia estiver
private int idmateria seu atributo de ser rowKey="#{mat.idmateria}"
e dentro de seu panel deixa assim com um unico atributo e testa.