离开smartgwt中的列表网格字段后验证不起作用

离开smartgwt中的列表网格字段后验证不起作用,gwt,smartgwt,Gwt,Smartgwt,我正在尝试获取对ListGrid中某个单元格所做的更改,以对照ListGrid中的其他单元格进行验证。要添加的项需要具有来自项容器中的项以及要添加的任何其他项的唯一名称。我已将ListGridField.validateOnChange设置为true。我的验证器如下所示: CustomValidator validator = new CustomValidator() { @Override protected boolean condition(Object value)

我正在尝试获取对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;
    }
};
CustomValidator validator=新的CustomValidator(){
@凌驾
受保护的布尔条件(对象值)
{
字符串名称=(字符串)值;
如果(_eeNames.contains(name))
{
setErrorMessage(“项目容器已包含名为\”的项目”
+姓名+“\”;
返回false;
}
RecordList records=listGrid.getDataAsRecordList();
int numFound=0;
for(int i=0;i1)
{
setErrorMessage(“正在导入的另一项的名称为“”
+姓名+“\”;
返回false;
}
}
返回true;
}
};
对于检查容器中已存在的项目,这一方法本身可以正常工作。但是,我注意到它没有正确验证为其他项目输入的名称。我发现正在发生或未发生的情况是,记录的值没有从编辑中更新,因此没有正确检查。如果(numFound>1)到
如果(numFound>=1)
只会导致chenged项目名称在以后的验证中发现自己无效。我尝试添加一个更改的处理程序,以便在更改时更改记录值,这几乎奏效。离开单元格后,验证就停止了。没有进一步的更改将进行验证。我调试并确认,在离开编辑单元格后,valida再也没有人打电话给我了

我还遇到了一个令人费解的问题:验证有时会说一个名称是有效的,即使它已经在项目容器中了

你知道是什么原因造成的吗?还有这个问题的解决方案吗?提前谢谢

[编辑6/3/11]


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

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


这有助于消除不正确的错误验证。但看起来我的真正问题在别处。从编辑移走后,失败的验证被设置为true,或者根本没有进行验证。我也会将其添加到原始问题中。如果单元格发生了更改。添加日志记录或断点以查看您返回的内容-验证程序可能只是在您打算返回错误时不返回任何错误。如果这没有帮助,您需要发布完整代码,以便有人可以实际运行它并查看出了什么问题。查看我的其余代码,发现有一个错误这是一段手动设置记录字段的代码,这在开始时破坏了验证。删除代码后,验证工作正常。感谢您的帮助。