Como desabilitar um commandButton no PrimeFaces de acordo com o retorno de um método boolean implementado no bean?

Eu tenho um botão para deletar um arquivo que eu só quero que apareça para o usuário se a minha classe tiver registros.
Segue o código dele:

<p:commandButton icon="ui-icon-trash"
   value="Excluir"
   actionListener="#{deParaBean.deletar}"
   oncomplete="PF('dlg1').hide"
   update=":mainForm"
   disabled="#{deParaBean.temRegistros}"
   ajax="false"
/>

Eu quero que a propriedade disabled dele receba true ou false de acordo com o método temRegistros que eu implementei no meu bean. Segue o código dele:

public boolean temRegistros(){
		if (itemParceria == null) {
			return false;
		} else {
			return true;
		}
}

Porém, quando eu inicio o servidor e subo a aplicação, antes mesmo de renderizar a tela, aparece o seguinte erro pra mim:

javax.servlet.ServletException: /pages/dePara.xhtml @111,23 disabled="#{deParaBean.temRegistros}": The class ‘br.com.parceria.bean.DeParaBean’ does not have the property ‘temRegistros’.

Alguém sabe o que eu fiz de errado?

Primeiramente bom dia!

O JSF esta lendo a sua EL (Expression Language) assim:

deParaBean.getTemRegistros()

Pois como você não passou os parenteses, ele entende que você quer chamar o método get do atributo temRegistros

Duas soluções para esse caso (escolha uma):

  • Criar o método getTemRegistros
  • Colocar os parenteses na EL

Outro detalhe:
Você esta querendo dar um update no formulário com o ajax desabilitado (false), mas o update só funciona com ajax habilitado (true), então não funcionará do jeito que você quer…

Ajax (acrônimo em língua inglesa de Asynchronous Javascript and XML, em português “Javascript Assíncrono e XML”) é o uso metodológico de tecnologias como Javascript e XML, providas por navegadores, para tornar páginas Web mais interativas com o usuário, utilizando-se de solicitações assíncronas de informações.