Problema com 2 dataTable Primefaces

3 respostas
diogoprosoft

Galera estou com problemas quando vou usar 2 dataTable no primefaces o primeiro é carregado no inicio da página e o segundo e carregado quando o primeiro é selecionado, até ai tudo funciona perfeitamente, o problema é que quando vou selecionar a linha do segundo ele não entra no método, alguém já passou por isso? Meu escopo é Request

3 Respostas

A

posta o codigo da sua pagina e seu managedbean

t+

diogoprosoft

XHTML

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//Dp:column XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/Dp:column/xhtml1-strict.dp:column">
<html xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
	<title>ISDRA - Gest&atilde;o de Chamados</title>
	<link rel="shortcut icon" href="imagens/isdra.ico"></link>
	<style type="text/css">
	
		.col1{
			text-align: right;
			color:#336699;
		}
		
		.col2{
			text-align: left;
			color:#336699;
		}

	</style>
	
</h:head>
<h:body>
<h:form prependId="false" id="frmCadastroStatus" style="font-size:7pt;">
	<p:growl showDetail="true" id="messages"/>
	
	<p:dataTable var="status" value="#{statusController.listaStatusBean}" paginator="true" rows="10"  
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                rowsPerPageTemplate="5,10,15" id="tabelaStatus" selectionMode="single" update="messages"
                emptyMessage="Nenhum registro encontrado." rowSelectListener="#{statusController.onRowSelect}" onRowSelectUpdate="frmCadastroStatus codStatusSaida">  
       <f:facet name="header" >  
           Lista de Status
       </f:facet>  

       <p:column>  
           <f:facet name="header">  
               <h:outputText value="Imagem" />  
           </f:facet>
           <center>  
           		<h:graphicImage url="#{status.figuraPath}"/>
           	</center>
       </p:column>  
 
       <p:column>  
           <f:facet name="header">  
               <h:outputText value="C&oacute;digo" />  
           </f:facet>  
           <h:outputText value="#{status.codStatus}" />
       </p:column>  
   
       <p:column>  
           <f:facet name="header">  
               <h:outputText value="Descri&ccedil;&atilde;o" />
           </f:facet>  
           <h:outputText value="#{status.dscStatus}" />
       </p:column>  

       <p:column>  
           <f:facet name="header">  
               <h:outputText value="Observa&ccedil;&otilde;es" />
           </f:facet>  
           <h:outputText value="#{status.dscObservacao}" />
       </p:column>  
   
    </p:dataTable>
	
    <br/>
    
	<p:toolbar> 
		<p:toolbarGroup align="left">
			<p:commandLink ajax="true" action="#{statusController.novoStatus}" update="frmCadastroStatus tabelaStatus" title="Nova Status" >
				<h:graphicImage url="imagens/novo.png" style="cursor:pointer;border: 0px solid;"/>
			</p:commandLink>
			<p:divider />
			<p:commandLink ajax="true" action="#{statusController.salvarStatus}" update="frmCadastroStatus tabelaStatus messages" title="Salvar Status" style="text-decoration: none;">			
				<h:graphicImage url="imagens/salvar.png" style="cursor:pointer;border: 0px solid;"/>
			</p:commandLink>
			<p:divider />
			<p:commandLink ajax="true" action="#{statusController.excluirStatus}" update="frmCadastroStatus tabelaStatus messages" title="Excluir Status" style="text-decoration: none;">
				<h:graphicImage url="imagens/lixeira.png" style="cursor:pointer;border: 0px solid;"/>
			</p:commandLink>
		</p:toolbarGroup>  
	</p:toolbar>
	
	<h:inputHidden value="#{statusController.statusBean.codStatus}"/>
	<h:panelGrid columns="2" cellspacing="5" columnClasses="col1, col2">
		<h:outputLabel value="C&oacute;digo" style="text-align: right;"/>
		<p:inputText value="#{statusController.statusBean.codStatus}" style="width:50px;" disabled="true"/>
		<h:outputLabel value="Descri&ccedil;&atilde;o do Status "/>
		<p:inputTextarea autoResize="true" value="#{statusController.statusBean.dscStatus}" style="width:400px;"/>
		<h:outputLabel value="Enviar Email"/>
		<h:panelGroup>
			<h:selectBooleanCheckbox title="(Envia email para Usu&aacute;rio e T&eacute;cnico do chamado)"  
					value="#{statusController.statusBean.flEnviarEmail}" />
			<h:outputLabel value="(Envia email para Usu&aacute;rio e T&eacute;cnico do chamado)"/>
    	</h:panelGroup>
		<h:outputLabel value="Observa&ccedil;&otilde;es"/>
		<p:inputTextarea autoResize="true" value="#{statusController.statusBean.dscObservacao}" style="width:400px;"/>
	</h:panelGrid>
    
    <br/>
    
    <h:inputText value="#{statusController.statusBean.codStatusSaida}" id="codStatusSaida"/>
	<p:dataTable var="statusSaida" value="#{statusController.listaStatusSaida}" paginator="true" rows="5"  
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                rowsPerPageTemplate="5" id="tabelaStatusSaida" update="messages" selectionMode="single"
                emptyMessage="Nenhum registro encontrado." rowSelectListener="#{statusController.onRowSelectSaida}">  
       <f:facet name="header" >  
           Lista de Status Sa&iacute;da
       </f:facet>  

       <p:column>  
           <f:facet name="header">  
               <h:outputText value="C&oacute;digo" />  
           </f:facet>  
           <h:outputText value="#{statusSaida.codStatusSaida}" />
       </p:column>  
   
       <p:column>  
           <f:facet name="header">  
               <h:outputText value="Descri&ccedil;&atilde;o" />
           </f:facet>  
           <h:outputText value="#{statusSaida.dscStatusSaida}" />
       </p:column>  
   
   		<f:facet name="footer">
   			<p:commandLink ajax="true" actionListener="#{statusController.excluirStatusSaida}" title="Excluir Status Sa&iacute;da" style="text-decoration: none;">
				<h:graphicImage url="imagens/lixeira.png" style="cursor:pointer;border: 0px solid;"/>
			</p:commandLink>
   		</f:facet>
   		
    </p:dataTable>
	    
</h:form>
</h:body>
</html>

ManagedBean

@ManagedBean
@RequestScoped
public class StatusController {

	ApplicationContext context = new ClassPathXmlApplicationContext(
			"conexao.xml");	
	StatusDAO statusDAO = (StatusDAO) context.getBean("statusDAO");
	private StatusBean statusBean;
	
	private List<StatusBean> listaStatusBean;
	private List<StatusBean> listaStatusSaida;
	
	@PostConstruct
	public void init(){
		
		try{
			
			statusBean = new StatusBean();
			listaStatusBean = statusDAO.selectStatusListAll();
			
		}catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"ATENÇÃO", e.getMessage()));
			e.printStackTrace();
		}
	}
	
	@PreDestroy
	public void destroy(){
		
		statusBean = new StatusBean();
		listaStatusBean = null;
		listaStatusSaida = null;
		
	}

	public void onRowSelectSaida(SelectEvent event){
		System.out.println(statusBean.getCodStatusSaida());
	}	
	
	public void onRowSelect(SelectEvent event){
		StatusBean status = new StatusBean();
		status = (StatusBean) event.getObject();
		
		try{
			statusBean = statusDAO.selectStatus(status);
			listaStatusSaida = statusDAO.selectStatusSaidaAll(statusBean);
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public StatusBean novoStatus(){
		
		statusBean = new StatusBean();
		
		try{
			listaStatusBean = statusDAO.selectStatusListAll();
			listaStatusSaida = null;
		}catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"ATENÇÃO", e.getMessage()));
			e.printStackTrace();
		}
		
		return statusBean;
	}
	
	public StatusBean salvarStatus(){
		
		if(statusBean.getCodStatus() == null || statusBean.getCodStatus() == 0){
			statusBean.setCodStatus(0);
			try{
				
				StatusBean status = statusDAO.insertStatus(statusBean);
				statusBean.setCodStatus(status.getCodStatus());				
				listaStatusBean = statusDAO.selectStatusListAll();
				
				if(!status.getpRetCodigo().equals(0)){
					throw new Exception(status.getpRetMensagem());
				}else{
					FacesMessage msg = new FacesMessage("Atenção", status.getpRetMensagem()); 
					FacesContext.getCurrentInstance().addMessage("messages", msg);
				}
				
			}catch(Exception e){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"ATENÇÃO", e.getMessage()));
				e.printStackTrace();
			}
		}else{
			try{
				StatusBean status = statusDAO.updateStatus(statusBean);
				listaStatusBean = statusDAO.selectStatusListAll();
				if(!status.getpRetCodigo().equals(0)){
					throw new Exception(status.getpRetMensagem());
				}else{
					FacesMessage msg = new FacesMessage("Atenção", status.getpRetMensagem()); 
					FacesContext.getCurrentInstance().addMessage("messages", msg);
				}
				
			}catch(Exception e){
				FacesMessage msg = new FacesMessage("Atenção", e.getMessage()); 
				FacesContext.getCurrentInstance().addMessage("messages", msg);
				e.printStackTrace();
			}
		}
		
		return statusBean;
	}

	public StatusBean excluirStatus(){
		
		try{
			statusBean = statusDAO.deleteStatus(statusBean);
			listaStatusBean = statusDAO.selectStatusListAll();
			
			if(!statusBean.getpRetCodigo().equals(0)){
				throw new Exception(statusBean.getpRetMensagem());
			}else{
				FacesMessage msg = new FacesMessage("Atenção", statusBean.getpRetMensagem()); 
				FacesContext.getCurrentInstance().addMessage("messages", msg);
			}
			
		}catch(Exception e){
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"ATENÇÃO", e.getMessage()));
			e.printStackTrace();
		}
		
		statusBean = new StatusBean();
		
		return statusBean;
	}
	
	public void excluirStatusSaida(){
		System.out.println(statusBean.getCodStatusSaida());
	}
		
	public List<StatusBean> getListaStatusBean() {
		return listaStatusBean;
	}

	public void setListaStatusBean(List<StatusBean> listaStatusBean) {
		this.listaStatusBean = listaStatusBean;
	}

	public StatusBean getStatusBean() {
		return statusBean;
	}

	public void setStatusBean(StatusBean statusBean) {
		this.statusBean = statusBean;
	}

	public List<StatusBean> getListaStatusSaida() {
		return listaStatusSaida;
	}

	public void setListaStatusSaida(List<StatusBean> listaStatusSaida) {
		this.listaStatusSaida = listaStatusSaida;
	}

}
A

cara,

vc ja tentou fazer assim, http://www.primefaces.org/showcase/ui/datatableRowSelectionSingle.jsf

PS: como vc tem que atualizar um input e datatable, vc nao precisa dar update no form todo somente nos dois id.

t+

Criado 1 de dezembro de 2011
Ultima resposta 1 de dez. de 2011
Respostas 3
Participantes 2