【发布时间】:2014-03-18 15:04:19
【问题描述】:
从 Majorra 2.1.27 升级到 2.2.5 后,我的 Bean-Validation 停止工作。简单例子:
<h:form>
<h:outputLabel for="tf_name" />
<h:inputText id="tf_name" value="#{test.testEntity.name}" />
<h:message for="tf_name" />
<br />
<h:commandButton value="save" action="#{test.cantTouchThis}"/>
</h:form>
我的 TestEntity 上的“名称”字段用 @NotNull 注释(我在 web.xml 中将 INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 true +org.apache.el.parser.COERCE_TO_ZERO 为我的 tomcat 设置为 false)。
如果我使用 Majorra 2.1.27(我使用 maven 顺便说一句。)一切正常。但是,如果我切换到 2.2.5,我的方法 cantTouchThis() 会被调用,即使我将这些字段留空。我还尝试了其他验证器,但它们似乎都不起作用。完全跳过验证。
有什么想法吗?
【问题讨论】:
-
process="@form" 和 update="@form" 不是属于 h:commandButton 的属性。尝试使用 MyFaces,有时一种实现不适用的功能适用于另一种实现。它看起来像 Mojarra 中的一个错误,但谁知道呢,这个例子对我来说也不正确。
-
你说得对,在本例中,由于将 PrimeFaces (p:) 组件切换为 JSF2 (h:) 组件,这是一些废话。我现在重新设计了这个例子,并删除了两个字段之一。现在应该是正确的。仍然:仅在 2.2.5 上跳过验证。将尝试 MyFaces 只是为了完整性,尽管我在 majorra 上的表现要好得多(这似乎很奇怪,因为“街上的词”似乎说不同)
-
现在试过了。在 MyFaces 2.1.14 和 2.2.0 上运行良好。所以它在除了 Majorra 2.2.5 之外的所有地方都可以工作......也许真的是实现中的一个错误......
-
好的,很高兴知道这一点。也许您应该将其报告给 Majorra 问题跟踪器。在性能方面,证据表明 MyFaces 非常好,这一点毫无疑问。有关详细信息,请参阅Understanding JSF 2.0 Performance – Part 3。这个比较的好处是它还提供了源代码,所以你可以自己尝试一下。请使用最新版本的 MyFaces,由于社区反馈,该版本被认为更稳定且错误更少。
标签: jsf-2 bean-validation hibernate-validator jsf-2.2