Datalista com seleção de linhas...Não funciona

3 respostas
S

Pessoal, estou tentando criar uma DataTable - Row Selection, ou seja, uma lista que quando clico em "visualizar", possa carregar os valores em uma Dialo, mas parece não funcionar, obtenho sempres uma exception como:

javax.servlet.ServletException: Cannot find component with identifier ":form:display" in view.
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
	br.com.estudo.filters.JPAFilter.doFilter(JPAFilter.java:33)

esta é a minha página:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<body>
<ui:composition template="../templates/template.xhtml">
    <ui:define name="content">

        <h:form id="form">
            <p:growl id="msgs" showDetail="true" />
            <p:dataTable id="eventos" var="evento" value="#{eventoBean.eventos}">
                <!--
                paginator="true" rows="5" paginatorPosition="bottom">
                -->



                <p:column headerText="Nome do Evento" style="width:100px">
                    <h:outputText value="#{evento.evento}" />
                </p:column>

                <p:column headerText="Data do Evento" style="width:100px">
                    <h:outputText value="#{evento.dataEvento}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                    </h:outputText>
                </p:column>

                <p:column headerText="Operações" style="width:100px">
                    <h:panelGrid columns="3" styleClass="actions" cellpadding="2">
                        <p:commandButton id="selectButton" update=":form:display"
                            oncomplete="eventDialog.show()" icon="ui-icon-search"
                            title="View">
                            <f:setPropertyActionListener value="#{evento}"
                                target="#{eventoBean.eventoSelecionado}" />
                        </p:commandButton>
                    </h:panelGrid>
                </p:column>
               
            </p:dataTable>
            <p:dialog header="Visualizar eventos"
            widgetVar="eventDialog"
                resizable="false"
                id="event"
                showEffect="fade"
                hideEffect="explode"
                width="800"
                minHeight="600"
                modal="true"
                >
                <h:panelGrid id="display" columns="2" cellpadding="4"
                    style="margin:0 auto;">
                    <h:outputText value="Evento:" />
                    <h:outputText  value="#{eventoBean.evento.evento}" />
                </h:panelGrid>
            </p:dialog>
             -->
        </h:form>
    </ui:define>
</ui:composition>
</body>
</html>
abaixo a minha classe Manipuladora:
package br.com.managedbeans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import br.com.modelo.Evento;
import br.com.repository.EventoRepository;

@ManagedBean
@SessionScoped
public class EventoBean {
	private Evento evento;
	private List<Evento> eventos;
	private List<Evento> eventocomplete;
	private Evento eventoSelecionado;

	public EventoBean() {
		evento = new Evento();
		eventos = new ArrayList<Evento>();
		eventocomplete = new ArrayList<Evento>();
	}

	public void adiciona() {
		EntityManager manager = this.getManager();
		EventoRepository repository = new EventoRepository(manager);
		if (this.evento.getId() == null) {
			repository.adiciona(this.evento);
		} else {
			repository.atualiza(this.evento);
		}
		this.evento = new Evento();
		this.evento = null;
	}

	public void preparaAlteracao() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		EventoRepository repository = new EventoRepository(manager);
		this.evento = repository.procura(id);
	}

	public void remove() {
		Map<String, String> params = FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager manager = this.getManager();
		EventoRepository repository = new EventoRepository(manager);
		repository.remove(id);
		this.evento = null;
	}

	public List<Evento> completeEvento(String query) {
		ELContext context = FacesContext.getCurrentInstance().getELContext();
		FacesContext.getCurrentInstance().getApplication().getELResolver()
				.getValue(context, null, "entityManager");
		EventoRepository repository = new EventoRepository(getManager());
		List<Evento> results = new ArrayList<Evento>();

		if (eventocomplete.isEmpty()) {
			this.eventocomplete = repository.complete();
		}
		for (Evento e : eventocomplete) {
			if (e.getEvento().startsWith(query)) {
				results.add(e);
			}
		}
		return results;
	}

	public List<Evento> getEventos() {
		ELContext context = FacesContext.getCurrentInstance().getELContext();
		FacesContext.getCurrentInstance().getApplication().getELResolver()
				.getValue(context, null, "entityManager");
		if (this.eventos.isEmpty()) {
			EventoRepository repository = new EventoRepository(getManager());
			this.eventos = repository.getLista();
		}
		return this.eventos;

	}

	private EntityManager getManager() {
		FacesContext fc = FacesContext.getCurrentInstance();
		ExternalContext ec = fc.getExternalContext();
		HttpServletRequest request = (HttpServletRequest) ec.getRequest();
		EntityManager manager = (EntityManager) request
				.getAttribute("EntityManager");
		return manager;

	}

	public Evento getEvento() {
		return evento;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public List<Evento> getEventocomplete() {
		return eventocomplete;
	}

	public void setEventocomplete(List<Evento> eventocomplete) {
		this.eventocomplete = eventocomplete;
	}

	public Evento getEventoSelecionado() {
		return eventoSelecionado;
	}

	public void setEventoSelecionado(Evento eventoSelecionado) {
		this.eventoSelecionado = eventoSelecionado;
	}

	public void setEventos(List<Evento> eventos) {
		this.eventos = eventos;
	}
}
Meu repositório
package br.com.repository;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.modelo.Evento;

public class EventoRepository {
	private EntityManager manager;

	public EventoRepository(EntityManager manager) {
		this.manager = manager;
	}

	public void adiciona(Evento evento) {
		this.manager.persist(evento);
	}

	public void remove(long id) {
		Evento evento = this.procura(id);
		this.manager.remove(evento);
	}

	public Evento atualiza(Evento evento) {
		return this.manager.merge(evento);
	}

	public Evento procura(Long id) {
		return this.manager.find(Evento.class, id);
	}

	@SuppressWarnings("unchecked")
	public List<Evento> getLista() {
		Query query = this.manager.createQuery("SELECT e FROM Evento e");
		return query.getResultList();
	}

	@SuppressWarnings("unchecked")
	public List<Evento> complete() {
		Query query = this.manager.createQuery("Select e From Evento as e");

		return query.getResultList();

	}
}

3 Respostas

DarthCego

Ola amigo

o update que vc faz ao chamar o dialog parece q nao esta certo tente dar um update no dialog assim

update=":form:dialogID"

Além disse eu recomendario vc criar um form só para o dialog aqui eu trabalho assim dai quando eu quero visualizar algo no dialog eu simplesmente faço

update=":formDialog"

Abraços

S

É… parece que estou sem sorte, não funfa…

S

Onde estou errando, me ajudem com isso, pelo amor de Deus… parece nada funcionar…

Criado 15 de março de 2012
Ultima resposta 15 de mar. de 2012
Respostas 3
Participantes 2