Data Table Prime Faces 3.0

3 respostas
S

Bom dia!
Pessoal estou tentando implementar um filtro no data table conforme http://www.primefaces.org/showcase-labs/ui/datatableLazy.jsf sendo que estou fazendo acesso a base de dados e trazendo os dados páginados porém até agora não obtive sucesso. Por esso motivo desejo uma ajuda, lembrando que já procurei no google e no forúm e não achei uma solução.
Agradeço a atenção. Segue código:
lista.xhtml

<p:panel header="Funcionários">
			<h:form id="form">
				<p:dataTable id="funcionario_table"
					emptyMessage="nenhum registro encontrado!" styleClass="style1"
					value="#{funcBean.funcionarios}" var="func" 
					rows="5" paginator="true" lazy="true" dynamic="true" sortBy="#{func.nome}"
					paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
					rowsPerPageTemplate="5,10,15" widgetVar="carsTable"
					loadingMessage="carregando">

					<f:facet name="header">
						<p:outputPanel>
							<h:outputText value="Search all fields:" />
							<p:inputText id="globalFilter" onkeyup="carsTable.filter()"
								style="width:150px" />
								
						</p:outputPanel>
					</f:facet>

					<p:column headerText="Nome" filterBy="#{func.nome}" sortBy="#{func.nome}" >
						<h:outputText value="#{func.nome}"  />
					</p:column>
					<p:column headerText="CPF">
						<h:outputText value="#{func.cpf}" />
					</p:column>

					<p:column headerText="Matrícula">
						<h:outputText value="#{func.matricula}" />

					</p:column>
					<p:column headerText="Aréa">
						<h:outputText value="#{func.area}" />
					</p:column>

					<p:column headerText="Cargo" filterBy="#{func.cargo}">
						<h:outputText value="#{func.cargo}" />
					</p:column>
					<p:column headerText="Telefone">
						<h:outputText value="#{func.telefone}" />
					</p:column>
					<p:column headerText="Celular">
						<h:outputText value="#{func.celular}" />
					</p:column>
					
				</p:dataTable>
			</h:form>
	</p:panel>

FuncBean.java

@ManagedBean(name = "funcBean")
@SessionScoped
public class FuncBean implements Serializable {

		
	private FuncionarioFachada fachada;
	private LazyDataModel<Funcionario> funcionarios;
	private String filtro;
	

	public FuncBean() {
		super();
		fachada = new FuncionarioFachada();
	}

		
	/* getters e setters */

	
	public LazyDataModel<Funcionario> getFuncionarios()
			throws RegraNegocioException {
		try {

			funcionarios = new LazyDataModel<Funcionario>() {

				@Override
				public List<Funcionario> load(int first, int pageSize,
						String sortField, SortOrder sortOrder,
						Map<String, String> filters) {
					List<Funcionario> lazyFunc = new ArrayList<Funcionario>();
					try {
						//lazyFunc = fachada.paginacao(first, pageSize);
						lazyFunc = fachada.listaPaginada(first, pageSize, filtro);
					} catch (RegraNegocioException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					return lazyFunc;
				}
			};
			funcionarios.setPageSize(10);
			funcionarios.setRowIndex(1);
			funcionarios.setRowCount(fachada.contaTodos());

		} catch (Exception e) {
			throw new RegraNegocioException(e);
		}

		return funcionarios;
	}

	public void setFuncionarios(LazyDataModel<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public String getFiltro() {
		return filtro;
	}

	public void setFiltro(String filtro) {
		this.filtro = filtro;
	}

}

3 Respostas

Diego_Adriano

Cara, o filtro é aplicado na coluna que vc deseja filtrar e não na configuração do dataTable:

Seu dataTable:

p:dataTable id="funcionario_table" emptyMessage="nenhum registro encontrado!" styleClass="style1" value="#{funcBean.funcionarios}" var="func" rows="5" paginator="true" lazy="true" dynamic="true"[color=red] sortBy="#{func.nome}" [/color]
Retire esse sortBy

p:dataTable id="funcionario_table" emptyMessage="nenhum registro encontrado!" styleClass="style1" value="#{funcBean.funcionarios}" var="func" rows="5" paginator="true" lazy="true" dynamic="true"

S

Diego,
Obrigado pela dica, porém ainda continua com o mesmo problema ou seja data table não e atualizado quando é feito o filtro.

Diego_Adriano
Cara eu uso dessa forma .. da uma olhada
<p:dataTable paginator="true"
								 paginatorPosition="bottom"
								 rows="20"
								 value="#{visitanteBean.visitantes}"
								 var="visitante"
								 emptyMessage="Nenhum Visitante Cadastrado !"
								 update="cadastroVisitante">
						
						<p:column headerText="ID" style="width:70px; text-align:center" sortBy="#{visitante.id}" filterBy="#{visitante.id}" >
								<h:outputText value="#{visitante.id}"/>
						</p:column>
					
						<p:column headerText="NOME" style="text-align:center" sortBy="#{visitante.nome}" filterBy="#{visitante.nome}">
								<h:outputText value="#{visitante.nome}"/>
						</p:column>	
										
						<p:column headerText="SOBRENOME" style="text-align:center" sortBy="#{visitante.sobrenome}" filterBy="#{visitante.sobrenome}">
								<h:outputText value="#{visitante.sobrenome}"/>
						</p:column>	
									
						<p:column headerText="CPF" style="text-align:center" sortBy="#{visitante.cpf}" filterBy="#{visitante.cpf}">
								<h:outputText value="#{visitante.cpf}"/>
						</p:column>
									
						<p:column style="width:75px;">
								<f:facet name="header">
									<h:outputText value="#"/>
								</f:facet>
								<p:commandButton update="cadastroVisitante" ajax="false" oncomplete="janelaVisitante.hide()"
										 image="ui-icon-circle-check">
									 <f:setPropertyActionListener target="#{visitanteBean.visitanteSelecionado}" value="#{visitante}"/>
								</p:commandButton>
											
						</p:column>
					
					</p:dataTable>
Bean:
public List<Visitante> getVisitantes() {
		System.out.println("GET VISITANTES");
		if (this.visitantes == null){
			
			visitantes = new ArrayList<Visitante>();
			VisitanteRepository visitanteRepository = new VisitanteRepository(this.entityManager);
			visitantes = visitanteRepository.visitantes();
			
			System.out.println("Visitantes: "+visitantes.size());
			return visitantes;
		}
		else
			return visitantes;
	}
Criado 7 de novembro de 2011
Ultima resposta 8 de nov. de 2011
Respostas 3
Participantes 2