commandButton rendeder dentro do dataTable

4 respostas Resolvido
jsfprogramaçãojava
A

Preciso usar a propriedade rendered de um commandButton que esteja dentro do dataTable. Para retornar true irá depender se:

1 - O usuário do sistema tem autoridade pra remover pessoas ou;
2 - Se quem cadastrou a pessoa o fez em até 24 horas.

Da forma que estou fazendo até que funciona mas gostaria de saber se essa é a melhor forma já que estou criando a propriedade boolean liberaRemocaoPessoa no model Pessoa e essa propriedade nunca armazenará nenhum valor no BD mas somente servirá para a view acessar e verificar as condições mencionadas acima.

Pessoa.java

@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;

private String fotoPerfil;
private String nome;
private String vulgo;
private String rg;
private String estadoRg;
private String cpf;
private Date nascimento;
private String nomeMae;
private String nomePai;
private String logradouro;
private String numero;
private String bairro;
private Cidade cidade;
private String estados;
private Date dataCadastro;
private List<Foto> foto;
private List<InfoCriminal> infoCriminal;
private Funcionario funcionario;
private List<Abordagem> listaAbordagem;

private boolean liberaRemocaoPessoa;

public boolean isLiberaRemocaoPessoa() {
	if (this.getId() != null) {
		Calendar dataAtual = Calendar.getInstance();
		Calendar dataLiberacao = Calendar.getInstance();
		dataLiberacao.setTimeInMillis(getDataCadastro().getTime());
		dataLiberacao.add(Calendar.HOUR_OF_DAY, +24);

		if (this.funcionario.getUsuarioLogin().getNivelAutoridade().isRemovePessoa()
				|| dataLiberacao.after(dataAtual)) {
			liberaRemocaoPessoa = true;
		}
		
	}

	return liberaRemocaoPessoa;
}

view.xhtml

<p:commandButton id="btnDeletaRegistro" update="btnDeletaRegistro"
    action="#{consultaPessoasCompletaBean.excluir}" value="Excluir"
    rendered="#{pessoa.liberaRemocaoPessoa}">

    <f:setPropertyActionListener value="#{pessoa}" 
        target="#{consultaPessoasCompletaBean.modelSelecionado}" />

    <p:confirm header="Confirmação" message="Deseja exluir?" 
        icon="pi pi-exclamation-triangle" />
 </p:commandButton>

4 Respostas

Mike

Bom dia @Agent_K

Eu acho que o mais correto seria deixar um método no bean para fazer essa validação, pois é regra de negocio, mas o importante mesmo é funcionar

A

Obrigado @Mike por responder.

Não estou vendo com clareza o seguinte:
Considerando que o commandButton está dentro de um dataTable, como eu acessaria o método dentro do bean sabendo que esse método teria que utilizar informações de cada registro Pessoa para renderizar ou não o button? Talvez seja simples a resolução porém não estou visualizando a mesma :slight_smile:

Mike
Solucao aceita

Simples:

<p:dataTable value="#{bean.pessoas}" var="pessoa">
    ...
    <p:commandButton rendered="#{bean.renderizarBotaoExcluir(pessoa)}" />
</p:dataTable>

public boolean renderizarBotaoExcluir(Pessoa p) {
    return user.temPermissao() && p.algumMetodo();
}
A

Obrigado @Mike.

Eu estava tentando de uma forma mais complicada.

Deu certo!

Criado 20 de março de 2019
Ultima resposta 20 de mar. de 2019
Respostas 4
Participantes 2