我最近的一些帖子与我在提交按钮中进行所有验证的事实有关。
我这样做的原因是我有一个设置一些只读编辑框的按钮。那么你可以为只读编辑框配置验证,但它不会在运行时执行。
由于我无法解决这个问题,并希望对验证有一致的看法,因此我在提交按钮上使用了自己的验证。
有没有办法验证只读字段?
将所有代码放在“提交”按钮中的一个好处是所有验证代码都在同一个地方,但我可以看到在使用自定义控件时它也会导致可移植性问题。
另一个问题是如果我的“提交”按钮未标记为“提交”按钮,如何启动验证。
答案 0 :(得分:2)
正如Dec所说,ReadOnly标志导致在没有<input>
标记的情况下呈现字段的内容。这使得在客户端无法进行验证,并且由于没有数据被提交回JVM,因此在提交时将忽略在该字段上编码的验证。
但是,会触发数据源QuerySaveDocument
。将验证放在那里和/或将其放在呈现的字段(readOnly=false
)中,并确保在所有带有验证器的字段上设置disableClientSideValidation="true"
。
您的QuerySaveDocument
代码看起来像这样(假设location是readOnly的字段)。
if (personDoc.getItemValueString("Location") == "") {
@ErrorMessage("The inherited location is blank and that is bad.");
return false;
}
return true;
这样,基于字段的验证器将首先触发,如果它们都成功,QuerySaveDocument
将触发。这意味着如果任何基于字段的验证程序失败,其邮件将显示在您的邮件区域中,但不会显示QuerySaveDocument
邮件。所有基于字段的验证程序成功后,才会显示QuerySaveDocument
条消息。
答案 1 :(得分:1)
当只读字段呈现给网络浏览器时,它不会使用<input>
标记呈现,而是使用简单的<span>
标记进行呈现。
验证只能在适当的输入标签上执行,因此您遇到的情况是正确的。没有字段可以在只读模式下进行验证。
有一个选项'显示禁用只读'会为该字段呈现<input disabled="true">
类型标记,但我不确定我的头脑是验证是否适用于这些字段如果字段是只读的,那么确实不需要任何验证,因为您以编程方式将值放入字段中,并且应该在添加值之前以编程方式验证它。