Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sem acesso ao atributo fazendo getter e setter

Boa tarde ilustres programadores!

Estou treinando o desenvolvimento de um programa java web onde coloquei o seguinte atributo em uma classe modelo:

private String fCodItem;

Fazendo o getter e setter deste atributo:

public String getfCodItem() {
        return fCodItem;
    }
public void setfCodItem(String fCodItem) {
        this.fCodItem = fCodItem;
    }

Desta forma, eu não conseguia ter acesso a este atributo no xhtml. Não trazia as informações contidas nele. Demorei muito tempo para perceber o "erro" que estava cometendo, porém fiz um PEQUENO ajuste e consegui ter acesso:

private String codItem;

public String getCodItem() {
        return codItem;
    }
    public void setCodItem(String codItem) {
        this.codItem = codItem;
    }

Como podem perceber, apenas tirei o 'f' da frente do nome do atributo, onde a segunda letra era maiúscula. No getter e setter mantiveram o character 'f' como minusculo. Fiz algumas pesquisas e não encontrei nada sobre a "proibição" da segunda letra de um atributo ser maiúscula ou algo que explicasse o porque disso ter ocorrido.

Podem me explicar ou me mandar algum site onde tenha essa regra?

Abraço

1 resposta
solução!

Dá uma olhada no Beans Specification (seção 8.8): https://download.oracle.com/otn-pub/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/beans.101.pdf?AuthParam=1554417741_368bb3f1924a01fd25825d1eed41b915

O problema que você está vendo é devido ao fato de que Spring usa as convenções de nomenclatura do Java Bean para descobrir as propriedades em uma classe Java.

Basicamente o "getfCodItem" fica fora da nomenclatura. A especificação diz que para fornecer um getter / setter, simplesmente capitalizamos a primeira letra. Para recuperar a propriedade do getter / setter, se as duas primeiras letras forem maiúsculas, toda a propriedade será deixada como está. Caso contrário, descapitalizamos a primeira letra. Então seu getter se tornaria getFCodItem, mas sua propriedade seria recuperada incorretamente do getter como FCodItem (e também daria problema).

Portanto, parece que a especificação não permite que você forneça uma tradução consistente de qualquer propriedade com um primeiro caractere minúsculo seguido por um caractere maiúsculo.

Minha sugestão é adotar uma propriedade completamente minúscula ou estender o prefixo de minúsculas para duas letras ( getfcodItem por exemplo).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software