【问题标题】:Validation not working after leaving list grid field in smartgwt在 smartgwt 中离开列表网格字段后验证不起作用
【发布时间】:2011-06-03 22:34:58
【问题描述】:

我正在尝试对 ListGrid 中的单元格进行更改,以针对 ListGrid 中的其他单元格进行验证。要添加的项目需要具有与项目容器中的项目以及要添加的任何其他项目相同的唯一名称。我将 ListGridField.validateOnChange 设置为 true。我的验证器如下所示:

CustomValidator validator = new CustomValidator() {
    @Override
    protected boolean condition(Object value)
    {
        String name = (String)value;

        if (_eeNames.contains(name))
        {
            setErrorMessage("Item Container already contains an Item with the name \" 
                + name +"\".");
            return false;
        }

        RecordList records = listGrid.getDataAsRecordList();
        int numFound = 0;
        for (int i = 0; i < records.getLength(); i++)
        {
            if (records.get(i).getAttribute("addAs") == null) continue;
            if (records.get(i).getAttribute("addAs").equalsIgnoreCase(name)) 
            {
                numFound++;
            }
            if (numFound > 1)
            {
                setErrorMessage("Another Item being imported has the name \""
                    + name + "\".");
                return false;
            }
        }
        return true;
    }
};

这最终可以正常工作,以检查容器中已有的项目。但是,我注意到它没有正确验证为其他项目输入的名称。我发现正在发生或未发生的是记录的值没有从编辑中更新,因此没有得到正确检查。将 if(numFound &gt;1) 更改为 if(numfound &gt;=1) 只会导致 chenged 项目名称在以后的验证中发现自己无效。我尝试添加一个更改的处理程序以在更改时更改记录值,这几乎可以工作。离开牢房后,验证停止工作。没有进一步的更改将生效。我调试了一下,确认离开编辑单元后,验证就再也没有调用过。

我也遇到了验证的莫名其妙的问题,有时会说一个名称是有效的,即使它已经在项目容器中。

知道是什么原因造成的吗?以及这个问题的任何解决方案?提前致谢。

[编辑 6/3/11]

验证错误返回 false 已得到解决,感谢 Charles。但是,我仍然遇到问题。编辑时,验证工作完美,但是当我退出单元格的编辑器时,错误消息和图标被清除,无效值显示为有效。我尝试将 exitHandler 添加到该字段并让 listgrid 在触发事件时验证事件的行号,但似乎没有做任何事情。这似乎也偶尔发生,有时有效,有时无效。如果最初输入的名称无效,则进入然后退出编辑器会导致它删除 invliad 标志。不幸的是,这是唯一一致的行为。

【问题讨论】:

    标签: gwt smartgwt


    【解决方案1】:

    ListGrid 管理两条数据:从服务器加载的原始记录,以及尚未保存的对该记录的更改。后者称为“editValues”。要访问应用了 editValues 的 Record 副本(就好像它们已经被保存一样),请调用 getEditedRecord(rowNum)。 ListGrid 编辑概述中的更多背景信息:

    http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/docs/Editing.html

    【讨论】:

    • 这有助于摆脱不正确的错误验证。然而,看起来我真正的问题在其他地方。从编辑移出后,失败的验证被设置为 true,或者根本没有进行验证。我也会将其添加到原始问题中。
    • 如果单元格发生更改,您应该会发现在单元格退出时会调用您的验证器。添加日志记录或断点以准确查看您返回的内容 - 当您打算出错时,验证器可能只是没有返回错误。如果这没有帮助,您需要发布完整的代码,以便有人可以实际运行它并查看发生了什么问题。
    • 查看我的其余代码,结果发现有一段代码手动设置记录字段,这最初搞砸了验证。删除代码修复它并且验证工作正常。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多