【问题标题】:GWT ValueChangeHandler and getting before valueGWT ValueChangeHandler 和获取价值
【发布时间】:2014-01-25 06:03:22
【问题描述】:

我想在更改其值之前和更改其值之后获取我的文本框的值。

String beforeValue = "";
TextBox textBox = new TextBox();
    textBox.addFocusHandler(new FocusHandler() {

        public void onFocus(final FocusEvent event) {
            beforeValue = textBox.getText();

        }
    });
    textBox.addValueChangeHandler(new ValueChangeHandler<String>() {

        public void onValueChange(final ValueChangeEvent<String> event) {
            System.out.println("Before value is " + beforeValue);
            System.out.println("After value is " + textBox.getText());
        }
    });

如上代码,我需要两个处理程序(FocusHandler 和 ValueChangeHadler)来获取值之前和值之后。我的问题是如何通过一个处理程序或另一种简单易行的方式获得它?我不想使用两个处理程序来获取它。任何建议,将不胜感激。 提前致谢!

【问题讨论】:

    标签: gwt event-handling handler gwt2


    【解决方案1】:

    您的想法(使用 2 个处理程序)足够公平,但它有问题。我不认为它可以以更好的方式完成。如果要使用单个处理程序,请使用两个处理程序创建自定义类包装器。

    这是给你的代码。

    public abstract class MyValueChangeHandler<T> implements ValueChangeHandler<T> {
    
    T prevValue = null;
    T value = null;
    
    public MyValueChangeHandler(final ValueBoxBase<T> widget) {
        widget.addFocusHandler(new FocusHandler() {
            public void onFocus(FocusEvent event) {
                prevValue = widget.getValue();
            }
        });
    }
    
    @Override
    public void onValueChange(ValueChangeEvent<T> event) {
        value = event.getValue();
        onValueChange(value, prevValue);
    
        // or
        // onValueChange(event, prevValue);
    
        prevValue = value;
    }
    
    public abstract void onValueChange(T value, T prevValue);
    
    // or
    // public abstract void onValueChange(ValueChangeEvent<T> event, T prevValue);
    
    }
    

    你可以把它当做,

    TextBox box = new TextBox();
        box.addValueChangeHandler(new MyValueChangeHandler<String>(box) {
            @Override
            public void onValueChange(String value, String prevValue) {
                Window.alert("Prev Value : " + prevValue + " CurrnetValue: "
                        + value);
            }
        });
    

    【讨论】:

    • 感谢您提供非常有用的答案,这样我可以减少代码行并易于理解并获得以前的价值。但我仍然很好奇会变成什么(我的意思是使用许多处理程序有什么缺点)?
    • 我不认为有任何巨大的缺点。所有处理程序都使用命令模式,使用命令模式是 Java 中的最佳实践之一。
    • 请给我一些 comman 模式 的链接,或者请告诉我这个先生的简介。我不知道它是什么,我真的很感兴趣。
    • 谢谢先生,抱歉回复晚了。
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2022-01-06
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2017-08-15
    • 2017-01-08
    相关资源
    最近更新 更多