Dúvida ao criar DataTable com seleção de linha

0 respostas
S

Pessoal, estou tentando fazer com que a cada vez que o usuario clicar em "Visualizar", obtenha uma janela modal com os dados correspondentes à linha, mas estou tendo um problema com o atributo "update", por favor, me ajudem.

Esta é a exceção gerada
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" 
								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:form id="dialog">
						<h:panelGrid id="display" columns="2" cellpadding="4"
							style="margin:0 auto;">
							<h:outputText value="Evento:" />
							<h:inputText value="#{eventoBean.evento.evento}" />
						</h:panelGrid>
					</h:form>
				</p:dialog>
			</h:form>
		</ui:define>
	</ui:composition>
</body>
</html>

Este abaixo é meu ManagedBean.

package br.com.managedbeans;

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

import javax.el.ELContext;
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;

@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;
	}
}
Criado 15 de março de 2012
Respostas 0
Participantes 1