Vaadin e Datamodel. Como posso obter o valor armazenado por uma implementação de datamodel de propriedade usada por um campo de etiqueta ??? Vaadin

StackOverflow https://stackoverflow.com/questions/2313174

Pergunta

É apenas um aplicativo de teste simples

import br.com.elf.ui.IndexApplication;

public class IndexApplication extends Application {

    public void init() {
        setMainWindow(getStartUpWindow());
    }

    private Window getStartUpWindow() {
        Window mainWindow = new Window();

        mainWindow.addComponent(
            new Label(new Property() {
                public Object getValue() {
                    return "DataModel Example";
                }

                public void setValue(Object value) throws ReadOnlyException, ConversionException {
                    throw new ReadOnlyException();
                }

                public Class<?> getType() {
                    return String.class;
                }

                public boolean isReadOnly() {
                    return true;
                }

                public void setReadOnly(boolean readyOnly) {
                    // Empty body
                }
            ));
        }

        return mainWindow;
    }

}

Observe que eu tenho um campo de etiqueta simples. Eu sei que posso simplesmente ligar

mainWindow.addComponent(new Label("DataModel Example"));

em vez de. Mas Para ver como a propriedade Datamodel funciona nos bastidores, eu adicionei uma implementação da propriedade. Mas em vez de ver na saída

Exemplo de datamodel

eu recebo

br.com.elf.ui.indexApplication$1@63A721

Por que ???

E qual é o objetivo real do método Object getType () definido na interface da propriedade ??? Se o HTML mostrar sua saída na string simples, então acho que não há razão para implementar um objeto getType (), não ???

Saudações,

Foi útil?

Solução

Eu descobri o porquê,

O método usado para mostrar seu valor em formato textual humanos-vermelho é para sequenciar. Como dito na API de propriedade

Retorna o valor da propriedade no formato textual legível por humanos.

Como mostrado abaixo

mainWindow.addComponent(new Label(new Property() {
        public Object getValue() {
            return "Wellcome to Vaadin!";
        }

        public void setValue(Object newValue) throws ReadOnlyException, ConversionException {
            throw new ReadOnlyException();
        }

        public Class<?> getType() {
            return String.class;
        }

        public boolean isReadOnly() {
            return true;
        }

        public void setReadOnly(boolean newStatus) {
            throw new UnsupportedOperationException();
        }

        @Override
        public String toString() {
            return (String) getValue();
        }
    }));

E o método gettype diz a você o tipo armazenado por esta propriedade, nada mais. Pode ser qualquer coisa, mesmo uma classe de conta, por exemplo. O valor mostrado pelo próprio componente é sempre derivado do método de tostragem.

Saudações,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top