作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通常,如果我们在 GWT 中有一些 textField,我们可以通过以下代码添加 BlurHandler:
textField.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
//what we need
}
});
但是如果我们使用 UiBinder 并且我们的 textField 由 @UiField 注释,并且在我们的 ui.xml 文件中提到,我们也可以通过以下代码添加 BlurHandler:
@UiHandler("textField")
protected void createBlurHandler(BlurEvent event) {
}
我想我就在这里,因为它是这样工作的。所以,问题是,我们可以在 ui.xml 文件中实际定义 BlurHandler 吗?
例如,可以在那里添加inputMaxLength和其他一些属性,GWT是否有像onChange方法这样的可能性,或者我描述的这些方式是唯一的可能性?
我想要这样的东西:
<g:TextBox ui:field="textField" onBlur="methodName" />
可能吗?
最佳答案
我很确定你所问的是不可能的。问题是您无法使用反射来确定要调用哪个方法。但是,您可以扩展 TextBox 类并在模板中使用它。扩展类可以有自己的属性,可以在模板中设置。示例如下,我在自己的 DefaultTextBox 上设置了默认测试。
public class DefaultTextBox extends TextBox {
/**
* The text color used when the box is disabled and empty.
*/
private static final String TEXTBOX_DISABLED_COLOR = "#AAAAAA";
private final String defaultText;
public @UiConstructor
DefaultTextBox(final String defaultText) {
this.defaultText = defaultText;
resetDefaultText();
// Add focus and blur handlers.
addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event) {
getElement().getStyle().clearColor();
getElement().getStyle().clearFontStyle();
if (defaultText.equals(getText())) {
setText("");
}
}
});
addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
if ("".equals(getText())) {
resetDefaultText();
}
}
});
}
public String getDefaultText() {
return defaultText;
}
@Override
public void setText(String text) {
if (text == null) {
super.setText(getDefaultText());
} else {
getElement().getStyle().clearColor();
getElement().getStyle().clearFontStyle();
super.setText(text);
}
}
public String getText() {
return super.getText();
}
/**
* This is override so that the editor framework will not get the default
* value but the actual null value when the default text is in the box.
*/
@Override
public String getValue() {
try {
return getValueOrThrow();
} catch (ParseException e) {
return null;
}
}
@Override
public void setValue(String value) {
setText(value);
}
/**
* This is overridden from the parent class because this is
* how the editor gets the value.
*/
public String getValueOrThrow() throws ParseException {
if (defaultText.equals(super.getValueOrThrow())) {
return null;
}
return super.getValueOrThrow();
}
/**
* Reset the text box to the default text.
*/
public void resetDefaultText() {
setText(defaultText);
getElement().getStyle().setColor(TEXTBOX_DISABLED_COLOR);
getElement().getStyle().setFontStyle(FontStyle.ITALIC);
}
}
然后在模板中你可以像这样设置属性。
<w:DefaultTextBox defaultText="name" ui:field="nameTextBox" />
这也适用于 setter ,您可以设置属性而不必使用 @UiConstructor,但就我而言,我想确保此类没有空构造函数。
关于java - 如何在GWT中为BlurEvent正确添加UiHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26480214/
我是一名优秀的程序员,十分优秀!