JSP: xhtml não encontra propriedade do bean

Prezados, boa noite.

Estou com uma dúvida: tenho uma propriedade declarada no bean, povoada logo adiante, mas quando chamo ela via modal do xhtml, o Tomcat me dá um erro.

No CalculoBean.java ela está simples assim:

String mensagens = "teste";

E o bean chama o modal assim:

RequestContext.getCurrentInstance().execute("PF('dlgMensagens').show();");

E ela é chamada no formulario.xhtml (importado dentro de calculo.xhtml):

<p:dialog id="dlgMensagens" header="Mensagens!" widgetVar="dlgMensagens"
modal="true" height="40%" width="60%" resizable="false"
draggable="false" minimizable="false" maximizable="false">
<h:panelGrid columns="1">
<h:outputText value="#{calculoBean.mensagens}" />
</h:panelGrid>
</p:dialog>

Mas o Tomcat me retorna isso:

GRAVE: Error Rendering View[/pages/calculo/calculo.xhtml]
javax.el.PropertyNotFoundException: /pages/calculo/formulario.xhtml @110,67
value="#{calculoBean.Mensagens}": Property 'mensagens' not found
on type br.com.projeto.web.CalculoBean

Por gentileza, alguma ideia de qual é o erro e como corrigir ele?

Muito obrigado.

Resolvido. Trocado:

String mensagens = "teste";

Por:

public String mensagens = "teste";

Outra dúvida, ainda com o mesmo trecho de código…

Alterando o bean para:

public String mensagens = "teste 1A";

int contador = 1;

public String getMensagens() {
    this.mensagens += " / teste 2A (contador = " + this.contador + ")";
    contador++;
    return this.mensagens;
}

A resposta que veio é:

'teste 1A / teste 2A (contador = 1) / teste 2A (contador = 2)'

A minha dúvida é: por que passa no getMensagens 2x?

(ele não é citado em mais nenhuma parte do código)

O .xhtml continua do mesmo jeito:

<p:dialog id="dlgMensagens" header="Mensagens!" widgetVar="dlgMensagens"
    modal="true" height="40%" width="60%" resizable="false" draggable="false"
    minimizable="false" maximizable="false">
<h:panelGrid columns="1">
<h:outputText value="#{calculoBean.mensagens}" />
</h:panelGrid>
</p:dialog>

Desde já, muito obrigado!

Isso faz parte do ciclo de vida do JSF. Ele pode chamar o método get de uma propriedade várias vezes dependendo de como (e quantas vezes) ela estiver sendo referenciada na tela. O recomendado e evitar ter lógica nos métodos get.

1 curtida