【发布时间】: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 >1) 更改为 if(numfound >=1) 只会导致 chenged 项目名称在以后的验证中发现自己无效。我尝试添加一个更改的处理程序以在更改时更改记录值,这几乎可以工作。离开牢房后,验证停止工作。没有进一步的更改将生效。我调试了一下,确认离开编辑单元后,验证就再也没有调用过。
我也遇到了验证的莫名其妙的问题,有时会说一个名称是有效的,即使它已经在项目容器中。
知道是什么原因造成的吗?以及这个问题的任何解决方案?提前致谢。
[编辑 6/3/11]
验证错误返回 false 已得到解决,感谢 Charles。但是,我仍然遇到问题。编辑时,验证工作完美,但是当我退出单元格的编辑器时,错误消息和图标被清除,无效值显示为有效。我尝试将 exitHandler 添加到该字段并让 listgrid 在触发事件时验证事件的行号,但似乎没有做任何事情。这似乎也偶尔发生,有时有效,有时无效。如果最初输入的名称无效,则进入然后退出编辑器会导致它删除 invliad 标志。不幸的是,这是唯一一致的行为。
【问题讨论】: