Vaadin e Datamodel. Como posso obter o valor armazenado por uma implementação de datamodel de propriedade usada por um campo de etiqueta ??? Vaadin
-
22-09-2019 - |
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,
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,