【问题标题】:JSF 2.1.X validation behaves differently on Glassfish 3.1.2 vs. Tomcat 6 & 7JSF 2.1.X 验证在 Glassfish 3.1.2 与 Tomcat 6 和 7 上的行为不同
【发布时间】: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):

  1. 如果提供了值,则会进行验证。如果值通过验证,则允许页面提交,如果失败,则向页面输出错误消息。

  2. 如果没有提供值,则不进行验证,允许页面提交

用例(玻璃鱼):

  1. 同上

  2. 如果未提供任何值,则验证仍然会发生,并且显然会失败。

我通过&lt;f:validator/&gt; 标签以及像&lt;f:validateLength/&gt; 这样的内置标签看到了自定义验证器的这种行为。

没有代码差异,只是运行代码的服务器。我已经搜索了谷歌,但我并没有真正找到任何帮助。我不了解有关验证的内容吗?你看出什么不对了吗?

这个Stackoverflow question 听起来像同样的问题,我只是没有看到阻止我的环境以这种方式运行的解决方案,或者在不需要该字段时如何禁用验证。

感谢任何人帮助我解决这个问题。

【问题讨论】:

  • 您使用的是什么 JSF 实现? Mojarra 还是 MyFaces?
  • 我已经用实现细节更新了问题正文。

标签: validation tomcat jsf-2 glassfish


【解决方案1】:

几天前我遇到了一个非常相似的问题,我认为属性 phoneArea 可能是整数或长整数。如果是这样,您可以查看this topicthis one

【讨论】:

  • 感谢 MarkusR 抽出宝贵时间,不幸的是,我的所有字段都绑定到字符串值。另外,我不确定(仍在调查),但如果我试图以 Tomcat 为目标,您提供的链接似乎是个问题。我们正在尝试迁移到 Glassfish,从我阅读的内容来看,@BalusC 似乎表明所引用的具体问题只是 Tomcat 的问题,而不是 Glassfish 的问题。但是,请告诉我;如果我误解了您所引用的内容。再次感谢您!
  • 使用您的第二个参考,provided,使我能够克服这个问题。我将 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 添加到 web.xml 中,现在一切正常。谢谢!
  • 这似乎在开始,但是;如果我将以上内容添加到我的 web.xml 中——任何具有 required="true" 属性的组件都不会显示验证错误消息。该页面不会发布,但用户仍然想知道为什么,因为没有消息显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
相关资源
最近更新 更多