【发布时间】:2012-09-22 15:03:26
【问题描述】:
我在 Tomcat 和 Glassfish 之间进行 JSF 验证时遇到了我认为奇怪的行为。以前我们使用的是 Tomcat,但现在需要运行完整的 Java EE 应用服务器。
在测试期间,我注意到当向服务器提交空字段时,只有一个长度验证器并且没有必需的属性,Glassfish 正在输出验证消息,而 Tomcat 会简单地跳过对这些元素的验证。
如果提交了一个值但验证失败,一切正常,这只是在没有输入值并提交页面时。
环境细节
- JSF Mojarra 2.1.12
- Richfaces 4.1
- 目标服务器 Glassfis 3.1.2
- 从 Tomcat 7.0.27 迁移
这是包含所描述行为的代码的 sn-p:
<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 question 听起来像同样的问题,我只是没有看到阻止我的环境以这种方式运行的解决方案,或者在不需要该字段时如何禁用验证。
感谢任何人帮助我解决这个问题。
【问题讨论】:
-
您使用的是什么 JSF 实现? Mojarra 还是 MyFaces?
-
我已经用实现细节更新了问题正文。
标签: validation tomcat jsf-2 glassfish