[RESOLVIDO] Primefaces DataTable - <p:ajax não funciona

6 respostas
camilooscar

Pessoal poderima me dar uma ajuda, por favor.

Estou tentando implementar o p:ajax em um p:datatable. Estou utilizando prime 3.4. Não estou tendo sucesso. Simplesmente não faz ação nenhuma quando seleciono uma linha da tabela.

Segue os códigos:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<ui:composition template="Edit.xhtml">
	<ui:define name="body">
		<h:form id="form_pesquisa">
			<p:growl id="msg" showDetail="false" escape="false" />

			<p:panelGrid styleClass="semBorda" columns="4">
				<h:outputLabel value="Nome do Usuário:" for="nome_user" />
				<p:inputText id="nome_user" required="true"
					value="#{alterarUsuarioController.usuarioSelecionado.nome}"
					title="#{bundle.CreateTiersTitle_nomTiers}" style="width:250px;" />

				<p:commandButton id="procurar_usuario" value="Procurar"
					actionListener="#{alterarUsuarioController.procurarUser()}"
					styleClass="btn_procurar_user" ajax="false"
					update="tabela_resultado_pesquisa">
				</p:commandButton>

				<p:commandButton id="alterar_usuario" value="Alterar"
					actionListener="#{alterarUsuarioController.procurarUser()}"
					disabled="#{alterarUsuarioController.desabilitaBtnAlterarUsuario}"
					styleClass="btn_alterar_user" ajax="false">
				</p:commandButton>


			</p:panelGrid>
			<br />
		</h:form>
		<h:form>

			<p:dataTable id="tabela_resultado_pesquisa"
				styleClass="tabela_resultado_pesquisa" var="usuario"
				value="#{alterarUsuarioController.listaUsuarioModel}"
				paginator="true" rows="10" rowKey="#{usuario.idUsuario}"
				emptyMessage="Nenhum registro."
				selection="#{alterarUsuarioController.usuarioSelecionado}">

				<p:ajax event="rowSelect"
					listener="#{alterarUsuarioController.habilitaEdicaoSelecionado}" update=":form_pesquisa"/>

				<f:facet name="header">
		          Resutado da Pesquisa
		        </f:facet>


				<p:column selectionMode="single" style="width:18px" />

				<p:column
					style="max-width: 150px; min-width: 150px; overflow: hidden; text-align: center">
					<f:facet name="header">
						<h:outputText value="User ID" />
					</f:facet>
					<h:outputText value="#{usuario.idUsuario}" />
				</p:column>

				<p:column
					style="max-width: 500px; min-width: 500px; overflow: hidden">
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{usuario.nome}" />
				</p:column>

				<p:column
					style="max-width: 450px; min-width: 450px; overflow: hidden">
					<f:facet name="header">
						<h:outputText value="Email" />
					</f:facet>
					<h:outputText value="#{usuario.email}" />
				</p:column>

				<p:column
					style="max-width: 80px; min-width: 80px; overflow: hidden; text-align: center"
					rendered="#{usuario.userEnabled}">
					<f:facet name="header">
						<h:outputText value="Status" />
					</f:facet>
					<p:graphicImage value="/resources/images/icones/habilitado.png"
						title="Usuário Habilitado" />
				</p:column>

				<p:column
					style="max-width: 80px; min-width: 80px; overflow: hidden; text-align: center"
					rendered="#{!usuario.userEnabled}">
					<f:facet name="header">
						<h:outputText value="Status" />
					</f:facet>
					<p:graphicImage value="/resources/images/icones/desabilitado.png"
						title="Usuário Desabilitado" />
				</p:column>

				<p:column
					style="max-width: 80px; min-width: 80px; overflow: hidden; text-align: center"
					rendered="#{usuario.accessUser}">
					<f:facet name="header">
						<h:outputText value="Access" />
					</f:facet>
					<p:graphicImage value="/resources/images/icones/habilitado.png"
						title="Regras de Acesso Definidas" />
				</p:column>

				<p:column
					style="max-width: 80px; min-width: 80px; overflow: hidden; text-align: center"
					rendered="#{!usuario.accessUser}">
					<f:facet name="header">
						<h:outputText value="Access" />
					</f:facet>
					<p:graphicImage value="/resources/images/icones/desabilitado.png"
						title="Regras de Acesso Não Definidas" />
				</p:column>

			</p:dataTable>
		</h:form>
	</ui:define>
</ui:composition>
</html>

Bean:

package br.com.gd.bpp.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;

import org.primefaces.event.SelectEvent;

import br.com.gd.core.dominio.infra.Usuario;
import br.com.gd.core.vo.UsuarioDataModel;

import com.davidhodin.freeerp.data.util.JsfUtil;
import com.davidhodin.freeerp.data.util.ValidacoesUtil;

@ManagedBean
@SessionScoped
public class AlterarUsuarioController implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Usuario usuarioSelecionado;
	private List<Usuario> listaUsuarioPesquisado;
	private UsuarioDataModel listaUsuarioModel;
	private String indiceMenu;
	private String pagina;
	private boolean desabilitaAbaEdicao;
	ValidacoesUtil validator;
	private boolean desabilitaBtnAlterarUsuario;

	public AlterarUsuarioController() {
		usuarioSelecionado = new Usuario();
		validator = new ValidacoesUtil();
	}

	public String initAlterarUsuarioController() {
		usuarioSelecionado = new Usuario();
		listaUsuarioPesquisado = new ArrayList<Usuario>();
		setDesabilitaAbaEdicao(true);
		setDesabilitaBtnAlterarUsuario(true);

		return "/data/admin/user/List_user";
	}

	public String redirectListUsuario() {

		setIndiceMenu("0");
		pagina = "List_user";
		return pagina;
	}

	public String redirectEditUsuario() {

		setIndiceMenu("1");
		pagina = "Edit_user";
		return pagina;
	}

	public String procurarUser() {

		boolean ok = true;
		int minimunNameSize = 4;

		if (!(usuarioSelecionado.getNome() == null)) {
			if (!validator.validateNome(usuarioSelecionado.getNome())) {
				JsfUtil.addErrorMessage("Nome inválido");
				ok = false;

			}
			if (!validator.validateNomeSize(usuarioSelecionado.getNome(),
					minimunNameSize)) {
				JsfUtil.addErrorMessage("Nome deve conter no mínimo "
						+ minimunNameSize + " caracteres");
				ok = false;

			}

		} else {
			ok = false;
		}

		if (ok) {
			pesquisarUsuario();
		}

		return "";

	}

	private void pesquisarUsuario() {
		// Aqui vai a chamada do ejb
		setListaUsuarioPesquisado(carregaListaUsuario());
		listaUsuarioModel = new UsuarioDataModel(listaUsuarioPesquisado);
	}

	// MOCK para carregar lista de usuario
	private List<Usuario> carregaListaUsuario() {
		List<Usuario> lista = new ArrayList<Usuario>();
		Usuario user = new Usuario();

		user.setIdUsuario(100);
		user.setNome("Usuário de teste 1");
		user.setEmail("[email removido]");
		user.setUserEnabled(true);
		user.setAccessUser(true);

		lista.add(user);

		user = new Usuario();
		user.setIdUsuario(200);
		user.setNome("Usuário de teste 2");
		user.setEmail("[email removido]");
		user.setUserEnabled(false);
		user.setAccessUser(true);

		lista.add(user);

		user = new Usuario();
		user.setIdUsuario(300);
		user.setNome("Usuário de teste 3");
		user.setEmail("[email removido]");
		user.setUserEnabled(true);
		user.setAccessUser(false);

		lista.add(user);
		
		setDesabilitaAbaEdicao(true);
		setDesabilitaBtnAlterarUsuario(true);

		return lista;
	}
	
	public void habilitaEdicaoSelecionado(SelectEvent event) {
		setDesabilitaBtnAlterarUsuario(false);
	}

	public List<Usuario> getListaUsuarioPesquisado() {
		return listaUsuarioPesquisado;
	}

	public void setListaUsuarioPesquisado(List<Usuario> listaUsuarioPesquisado) {
		this.listaUsuarioPesquisado = listaUsuarioPesquisado;
	}

	public UsuarioDataModel getListaUsuarioModel() {
		return listaUsuarioModel;
	}

	public void setListaUsuarioModel(UsuarioDataModel listaUsuarioModel) {
		this.listaUsuarioModel = listaUsuarioModel;
	}

	public Usuario getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public String getIndiceMenu() {
		return indiceMenu;
	}

	public void setIndiceMenu(String indiceMenu) {
		this.indiceMenu = indiceMenu;
	}

	public String getPagina() {
		return pagina;
	}

	public void setPagina(String pagina) {
		this.pagina = pagina;
	}

	public boolean isDesabilitaAbaEdicao() {
		return desabilitaAbaEdicao;
	}

	public void setDesabilitaAbaEdicao(boolean desabilitaAbaEdicao) {
		this.desabilitaAbaEdicao = desabilitaAbaEdicao;
	}

	public ValidacoesUtil getValidator() {
		return validator;
	}

	public void setValidator(ValidacoesUtil validator) {
		this.validator = validator;
	}

	public boolean isDesabilitaBtnAlterarUsuario() {
		return desabilitaBtnAlterarUsuario;
	}

	public void setDesabilitaBtnAlterarUsuario(
			boolean desabilitaBtnAlterarUsuario) {
		this.desabilitaBtnAlterarUsuario = desabilitaBtnAlterarUsuario;
	}

}

Obrigado

6 Respostas

asandrob

Aquiupdate=":form_pesquisa"vai “:” mesmo?
Não seria

update="form_pesquisa"
camilooscar

Já tentei colocar assim, mas também não funcionou… :roll: :cry:

A

Cara, estou com o mesmo problema! como você resolveu?

camilooscar

Alexandre, bom dia.

Qual problema vc esta tendo? esta dando algum erro ou somente não faz ação nenhuma?

Tive que implementar um UsuarioDataModel.

Me passa o problema q vc esta tendo.

tiago_

camilooscar:
Alexandre, bom dia.

Qual problema vc esta tendo? esta dando algum erro ou somente não faz ação nenhuma?

Tive que implementar um UsuarioDataModel.

Me passa o problema q vc esta tendo.

Opa, e ai meu velho, blz ? Vc tem algum exemplo ai onde eu possa alimentar uma dataTable ?

ex: Tenho 2 campos -> Item e quantidade… Gostaria de de alimentar esse 2 campos numa dataTable… E jogar esses valores no banco.

Vou tentar desenhar aqui:


Item: _________ Quantidade:_____ [Adicionar]

Tabela

Item Quantidade
x 2
z 25
e 35

[Cadastrar] [Limpar]


Entendeu mais ou menos ? Eu tenho q criar um DataModel p isso ? To meio perdido : /

Vlw :slight_smile:

Tino_

Resolvido ?

Aonde ?

Cade o resultado ?

:frowning:

Se alguém souber algo, estou com problema em colocar um evento de click para as linhas do <p:datatable />
para limpar um combo.

<p:ajax /> não é aceito.

Valew

Criado 17 de setembro de 2012
Ultima resposta 10 de nov. de 2014
Respostas 6
Participantes 5