Vaadin addStyleName问题

时间:2011-05-04 22:37:16

标签: vaadin

我使用TextField创建了TextChangeListener。当用户键入某些值(在本例中为“admin”)时,将在该字段上调用addStyleName,字体颜色变为红色。但之后,该值为空白,每个输入的字符都被清除 这是应用程序的代码。为什么在将新样式添加到TextField后更改其值?

public class VaadintestApplication extends Application {
@Override
public void init() {
    Window mainWindow = new Window("Vaadintest Application");

    setTheme("test");

    TextField textField = new TextField("username");
    textField.setEnabled(true);

    textField.setTextChangeEventMode(TextChangeEventMode.EAGER);
    textField.addListener(new TextChangeListener() {
        public void textChange(TextChangeEvent event) {
            if ("admin".equals(event.getText())) {
                ((TextField) event.getComponent()).addStyleName("text-error");
            } else {
                ((TextField) event.getComponent()).removeStyleName("text-error");
            }
        }
    });

    mainWindow.addComponent(textField);
    setMainWindow(mainWindow);
   }
}

1 个答案:

答案 0 :(得分:2)

我猜想会发生以下情况:

  • 样式名称更改会触发服务器上的重绘,导致TextField组件再次序列化到客户端

  • 客户端接收序列化(整个血腥的东西,不仅仅是更改的部分,因为这是Vaadin的工作方式),因此它会更改文本字段的内容,同时忽略任何待处理的更改文本更改侦听器

解决方案:

  1. 在添加/删除样式名称的同时更新TextField的值:((TextField) event.getComponent()).setValue(event.getText())

  2. 创建一个自定义客户端小部件,扩展VTextField并在其中添加功能