GWT:无法从文本框中获取价值

时间:2011-10-28 19:21:45

标签: gwt

我正在使用GWT 2.4。我正在尝试提交一个AJAX请求,唯一的输入是页面上文本字段的值。以下是我将处理程序附加到页面按钮的方法......

public void onModuleLoad() {
    ...
    final com.google.gwt.dom.client.Element submitElement = Document.get().getElementById(SUBMIT_BUTTON_ID);
    final Button submitButton = Button.wrap(submitElement);
    ...
    // Add a handler to send the name to the server
    GetHtmlHandler handler = new GetHtmlHandler();
    submitButton.addClickHandler(handler);
}

但这是问题所在。在我的处理程序中,每当我尝试获取文本字段的值时,它总是返回首次加载页面时在文本字段中输入的值,而不是最新的值...

class GetHtmlHandler implements ClickHandler {
    /**
     * Fired when the user clicks on the submitButton.
     */
    public void onClick(ClickEvent event) {
        submitRequest();
    }

    /**
     * Send the name from the nameField to the server and wait for a
     * response.
     */
    private void submitRequest() {
        ...
        final Element nameFieldElement = DOM.getElementById(Productplus_gwt.NAME_FIELD_ID);

        // This always returns an old value.
        String docId = nameFieldElement.getAttribute("value");

任何人都知道如何在我的处理程序中编写GWT代码,以返回给定页面ID的文本字段的最新值?

谢谢, - 戴夫

2 个答案:

答案 0 :(得分:2)

尝试使用DOM.getPropertyString / DOM.getElementProperty

以下是来自GWT源的javadoc for getAttribute函数。它清楚地表明,对于几个浏览器,对javascript的“getAttribute”函数的支持可能不一致,因此应该使用Element和子类。

或者你可以使用DOM.getPropertyString来获取一个使用javascript的对象表示法获取当前值的值

/**
* Retrieves an attribute value by name.  Attribute support can be
* inconsistent across various browsers.  Consider using the accessors in
* {@link Element} and its specific subclasses to retrieve attributes and
* properties.
* 
* @param name The name of the attribute to retrieve
* @return The Attr value as a string, or the empty string if that attribute
*         does not have a specified or default value
*/
public final String getAttribute(String name) {
    return DOMImpl.impl.getAttribute(this, name);
}

我尝试使用javascript的“getAttribute”函数来获取IE8和FF6中文本字段的值。 IE给出了文本字段的更新值,而FF没有。这是小提琴

http://jsfiddle.net/GvNu4/

答案 1 :(得分:0)

就像你说这是一个AJAX请求所以无论你有什么代码...... GWT代码都会继续运行。

您应该使用请求的回调并在那时检查nameFieldElement的值。