Ваадин и DataModel. Как я могу получить значение, хранимое реализацией Property DataModel, используемой полем метки ??? Vaadin - PullRequest
0 голосов
/ 22 февраля 2010

Это просто тестовое приложение

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;
    }

}

Обратите внимание, у меня есть пустое поле Label. Я знаю, что могу просто позвонить

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

вместо этого. Но , чтобы увидеть, как Property DataModel работает за сценой , я добавил реализацию Property. Но вместо того, чтобы видеть в выводе

Пример DataModel

Я получаю

br.com.elf.ui.IndexApplication$1@63a721

Почему ???

А какова реальная цель метода Object getType (), определенного в интерфейсе свойств ??? Если HTML показывает свои выходные данные в виде простой строки, так что я думаю, что нет причин для реализации Object getType (), не надо ???

С уважением,

1 Ответ

2 голосов
/ 23 февраля 2010

Я выяснил почему,

Метод, используемый для отображения его значения в текстовом формате, который может быть изменен человеком: toString . Как сказано в Property API

возвращает значение свойства в удобочитаемом текстовом формате.

Как показано ниже

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();
        }
    }));

И метод getType сообщает вам тип, сохраняемый этим свойством , больше ничего. Это может быть что угодно, даже класс Account, например. Значение, показанное самим Компонентом , всегда выводится из метода toString .

С уважением,

...