0

我正在尝试找到一种在 WebObjects 应用程序中进行字段验证的好方法。如果我有一个文本字段并且我将一个数字格式化程序绑定到它,似乎默认行为是在用户输入有效数字时解析数字,或者,如果用户输入无效数字,它似乎只是忽略用户输入的值。我无法在保存方法或操作方法中进行验证,因为 WO 在到达操作方法时已经忽略了非数字输入。在 WebObjects 应用程序中,是否有一种标准/推荐的方式来验证用户输入,以便可以提醒用户注意无效输入,而不仅仅是忽略无效输入?

此页面:http ://en.wikibooks.org/wiki/WebObjects/EOF/Using_EOF/Validation 声称 WO 和 EOF 具有“一系列令人难以置信的验证机制”,甚至暗示有一种内置方法可以防止用户输入不适当的数据,但我无法找到任何文档或如何做到这一点的示例(如果实际上有内置方式)。想出一个自定义的 javascript 验证器来防止不适当的数据似乎是一场噩梦——找到一种方法让 JS 识别和处理后端格式化程序/解析器处理的所有相同的边缘情况。如果 WO 真的有一种内置的方式将格式化程序边缘情况传播到 JS 验证,那就太好了。

上面的链接还说 WOComponent 中有一个 validationFailedWithException 方法,该方法被称为“当 EO 或格式化程序在分配期间验证失败时”,但是在上面的非数字示例情况下,如何使格式化程序验证失败?如果输入了非数字,我尝试让格式化程序在 parse 方法中引发异常,但该异常不会传递给 validationFailedWithException 方法。有谁知道我如何在格式化程序中触发一个异常来触发对validationFailedWithException()的调用?这甚至是最好的/推荐的方式吗?有人知道更好的方法吗?

4

1 回答 1

1

我很确定,每次格式化错误都会调用validationFailedWithException。您应该在那里收到一个包装 ParseException 的 NSValidationException。该方法通常在包含绑定的组件上调用。它可能会在插入符号 (^) 绑定上被跳过。

所有标准数字格式化程序都已经抛出 ParseException(请参阅 Format.parse(String))。

WebObjects 中的验证处理可能会变得相当复杂,这实际上取决于您的需求。但它的设计没有考虑 JavaScript 或 Ajax。Wonder 中较新的方法可能会包含客户端,但我没有这方面的经验。

正常的验证顺序是:

  • 如果需要,使用格式化程序将输入转换为目标类型
  • 在目标对象上调用 validateAttributeName 方法,其中 AttributeName 是接收值的属性名称

当此序列中的某些事情失败时,将调用validationFailedWithException。

在保存企业对象时,对对象调用“validateFor...”。此时必须在您的操作方法中捕获异常。

所以你有两点来处理验证错误。“语法”错误必须在validationFailedWithException 中处理。在此之后,您有有效的输入。您可以在您的操作方法或 validateFor...(例如 validateForSave)中手动进一步检查那些或更大的对象结构。

于 2012-06-26T11:00:19.993 回答