Boa noite.
Qual a melhor forma de fazer com que o <p:button dentro de uma DataTable fique desabilitado caso um campo da tabela do db retorne null?
Boa noite.
Qual a melhor forma de fazer com que o <p:button dentro de uma DataTable fique desabilitado caso um campo da tabela do db retorne null?
Comando disabled.
Obrigado Rodrigo_Marden por responder.
Minha dúvida seria justamente como fazer a conversão de uma valor como o null retornado do db para false ou true para ser utilizado no disabled="true". Seria essa a lógica correta?
Ai já depende de como a sua informação está vindo, se você estiver usando controller ou alguma classe por onde essa informação passe, você pode só criar um if que retorne true ou false caso essa informação esteja null.
Poste seus códigos que estão relacionados a essa situação que eu posso te ajudar melhor.
Ok Rodrigo_Marden, segue os códigos:
.xhtml
<p:button icon="ui-icon-pencil" title="Usuario"
outcome="/CadastroUsuarioLogin">
<f:param name="funcionario" value="#{funcionario.id}" />
</p:button>
ConsultaFuncionariosBean:
@Named
@javax.faces.view.ViewScoped
public class ConsultaFuncionariosBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Funcionarios funcionariosRepository;
private List<Funcionario> funcionarios;
private Funcionario funcionarioSelecionado;
@Inject
private CadastroFuncionarios cadastro;
public String excluir() {
FacesContext context = FacesContext.getCurrentInstance();
try {
this.cadastro.excluir(this.funcionarioSelecionado);
this.consultar();
context.addMessage(null, new FacesMessage("Contato excluído com sucesso!"));
} catch (NegocioException e) {
FacesMessage mensagem = new FacesMessage(e.getMessage());
mensagem.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(null, mensagem);
}
return "/ConsultaFuncionarios?faces-redirect=true";
}
public void consultar() {
this.funcionarios = funcionariosRepository.todos();
}
public List<Funcionario> getFuncionarios() {
return funcionarios;
}
public Funcionario getLancamentoSelecionado() {
return funcionarioSelecionado;
}
public void setLancamentoSelecionado(Funcionario lancamentoSelecionado) {
this.funcionarioSelecionado = lancamentoSelecionado;
}
}
repository:
public class Funcionarios implements Serializable {
private static final long serialVersionUID = 1L;
private EntityManager manager;
@Inject
public Funcionarios(EntityManager manager) {
this.manager = manager;
}
public List<Funcionario> todos() {
TypedQuery<Funcionario> query = manager.createQuery("from Funcionario", Funcionario.class);
return query.getResultList();
}
public void adicionar(Funcionario funcionario) {
this.manager.persist(funcionario);
}
public Funcionario porId(Long id) {
return manager.find(Funcionario.class, id);
}
public Funcionario guardar(Funcionario funcionario) {
return this.manager.merge(funcionario);
}
public void remover(Funcionario funcionario) {
this.manager.remove(funcionario);
}
}
Você precisa criar, no teu managedbean, um método que verifique se o valor do tal campo é nulo e devolva um valor booleano (true ou false), de acordo com a validação, algo assim:
public boolean isCampoNull() {
return null == atributo.getCampo(); //Se quiser validar se não está nulo, use nul != atributo.getCampo();
}
Aí, no button, coloca
<p:button disabled=#{bean.isCampoNull}"/>
Exatamente como o Darlan disse, só adaptar isso ao seu problema. 
Ou você pode fazer assim:
<p:button disabled=#{managedBean.campoQueVoceAchaQueEstaNulo eq null}"/>
Obrigado pessoal pela ajuda.
Lucas_Gabriel1, isso funcionou para mim e é uma solução bem simples, só precisei usar a negação ne.
Obrigado.