在smartgwt中保留列表网格字段后验证无效

时间:2011-06-02 18:12:26

标签: gwt smartgwt

我正在尝试对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 >1)更改为if(numfound >=1)只会导致在以后的验证中发现自己无效的项目名称无效。我尝试添加一个更改的处理程序来更改记录值,这几乎可以工作。离开单元格后,验证才停止工作。没有进一步的更改将验证。我调试了,并确认在离开编辑单元后,再也没有调用验证。

我还有一个无法解释的验证问题,有时候说名称有效,即使它已经在项目容器中。

对于造成这种情况的原因有什么想法吗?以及这个问题的任何解决方案?提前谢谢。

[编辑6/3/11]

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

1 个答案:

答案 0 :(得分:1)

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

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