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 :
[quote=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"/>
[/quote]
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 ,
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")
public class MateriaCtrl {
private Materia materia;
@Inject
private DaoMateira daoMateria; //classe de persistencia
public MateriaCtrl() {
materia = new Materia();
}
public Materia getMateria() {
return materia;
}
public void setMateria(Materia materia) {
this.materia = materia;
}
public DaoMateira getDaoMateria() {
return daoMateria;
}
public void setDaoMateria(DaoMateira daoMateria) {
this.daoMateria = daoMateria;
}
public String metodo(int id) {
materia = daoMateria.getMateriaById(id); //metodo que retorna por Id
return "pagina2.xhtml";
}
}
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!!
[quote=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")
public class MateriaCtrl {
private Materia materia;
@Inject
private DaoMateira daoMateria; //classe de persistencia
public MateriaCtrl() {
materia = new Materia();
}
public Materia getMateria() {
return materia;
}
public void setMateria(Materia materia) {
this.materia = materia;
}
public DaoMateira getDaoMateria() {
return daoMateria;
}
public void setDaoMateria(DaoMateira daoMateria) {
this.daoMateria = daoMateria;
}
public String metodo(int id) {
materia = daoMateria.getMateriaById(id); //metodo que retorna por Id
return "pagina2.xhtml";
}
}
private Materia materia;
private EntityManager entityManager;
private GenericDAO<Materia> materiaDao;
private int idpesqueiro;
public GenericDAO<Materia> getMateriaDao() {
return materiaDao;
}
public void setMateriaDao(GenericDAO<Materia> materiaDao) {
this.materiaDao = materiaDao;
}
public int getIdpesqueiro() {
return idpesqueiro;
}
public void setIdpesqueiro(int idpesqueiro) {
this.idpesqueiro = idpesqueiro;
}
public MateriaBean() {
this.entityManager = JPAUtil.getEntityManagerFactory().createEntityManager();
this.materiaDao = new GenericDAO<Materia>(entityManager, Materia.class);
this.materia = new Materia();
this.materia.setData(GregorianCalendar.getInstance().getTime());
this.materia.setPesqueiro(new GenericDAO<Pesqueiro>(entityManager, Pesqueiro.class).ler(2));
Pesqueiro pesq = new Pesqueiro();
pesq.setId(1);
idpesqueiro = 1;
this.materia.setPesqueiro(pesq);
}
public Materia getMateria() {
return materia;
}
public void setMateria(Materia materia) {
this.materia = materia;
}
public String salvar(){
Pesqueiro pesq = new Pesqueiro();
pesq.setId(idpesqueiro);
materia.setPesqueiro(pesq);
this.entityManager.getTransaction().begin();
this.materiaDao.atualizar(materia);
this.entityManager.getTransaction().commit();
return "conhecapesqueiro.jsf";
}
public List<Materia> getMaterias(){
return materiaDao.listarTodos("data desc");
}
}
e agora o dao
protected EntityManager manager;
protected Class<?> tipo;
protected String nomeTabela;
public GenericDAO(EntityManager manager, Class<?> tipo) {
this.manager = manager;
this.tipo = tipo;
this.nomeTabela = JPAUtil.getTableName(tipo);
}
public void criar(T t) {
manager.persist(t);
manager.flush();
}
@SuppressWarnings("unchecked")
public T ler(int codigo){
return (T) manager.getReference(tipo, codigo);
}
public void remover(T t){
manager.remove(t);
manager.flush();
}
public void atualizar(T t){
manager.merge(t);
manager.flush();
}
@SuppressWarnings("unchecked")
public List<T> listarTodos(int pagina, int quantidadePorPagina){
Query query = manager.createQuery("SELECT x FROM " + nomeTabela + " x");
query.setFirstResult(pagina);
query.setMaxResults(quantidadePorPagina);
return query.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 !
[quote=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!![/quote]
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 !
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.
usa o dataTable do primefaces e deixa assim com o restante
<p:dataTable id="Materia" var="mat" value="#{materiaBean.materias}" rowKey="#{mat.id}"(adiciona aqui o id de sua entidade Materia)
selection="#{materiaBean.materia}" selectionMode="single">
Cria um panel em sua materiadetalhada.xhtml como abaixo e testa.
[quote=aprendizweb]usa o dataTable do primefaces e deixa assim com o restante
<p:dataTable id="Materia" var="mat" value="#{materiaBean.materias}" rowKey="#{mat.id}"(adiciona aqui o id de sua entidade Materia)
selection="#{materiaBean.materia}" selectionMode="single">
Cria um panel em sua materiadetalhada.xhtml como abaixo 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.
[quote=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.
<h:outputLabel value="Nome:" styleClass="rotulos"/>
<h:outputLabel value="#{materiaBean.materia.pesqueiro.nome}" />
[/quote]
vixi , o pior que ta tudo certinho do jeito que voce falo rsrs aparece o painel mais nao carrega nada
materiadetalhada: