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