我在 Tomcat 和 Glassfish 之间进行 JSF 验证时遇到了我认为奇怪的行为。以前我们使用的是 Tomcat,但现在需要运行完整的 Java EE 应用服务器。
在测试期间,我注意到当向服务器提交空字段时,只有一个长度验证器并且没有必需的属性,Glassfish 正在输出验证消息,而 Tomcat 会简单地跳过对这些元素的验证。
如果提交了一个值但验证失败,一切正常,这只是在没有输入任何值并提交页面时。
环境细节
- JSF 莫哈拉 2.1.12
- 富脸 4.1
- 目标服务器 Glassfis 3.1.2
- 从 Tomcat 7.0.27 迁移
这是包含所描述行为的代码片段:
<h:inputText id="phoneAreaCode"
maxlength="3"
size="2"
value="#{bean.phoneArea}"
style="margin-left: 8px;">
<f:validateLength minimum="3"/>
<f:validator validatorId="phoneValidator"/>
<a4j:ajax/>
</h:inputText>
用例(Tomcat):
如果提供了值,则会进行验证。如果值通过验证,则允许页面提交,如果失败,则向页面输出错误消息。
如果没有提供值,则不进行验证,并允许页面提交
用例(玻璃鱼):
和上面一样
如果没有提供值,验证仍然会发生,并且显然会失败。
我看到自定义验证器通过<f:validator/>
标签以及像<f:validateLength/>
.
没有代码差异,只是运行代码的服务器。我已经搜索了谷歌,但我并没有真正找到任何帮助。我不了解有关验证的内容吗?你看有什么不对吗?
这个Stackoverflow 问题听起来像同一个问题,我只是没有看到阻止我的环境以这种方式运行的解决方案,或者在不需要该字段时如何禁用验证。
感谢任何人帮助我解决这个问题。