【问题标题】:Avoid validation of @Size annotation in JPA避免在 JPA 中验证 @Size 注释
【发布时间】:2012-12-20 17:02:22
【问题描述】:

我有一个具有以下属性的 JPA 实体:

public class Person implements Serializabe {
...
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "name", nullable = false, length = 45)
private String name;
...

它的观点:

<h:outputLabel value="Name: "/>           
<h:inputText id="name"
             value="#{personBean.person.name}"
             validator="#{personValidator.validate}"/>
<rich:message for="name"/>

personValidator 检查 0

INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=contentForm:name[severity=(ERROR 2), summary=(size must be between 1 and 45), detail=(size must be between 1 and 45)]

我尝试将&lt;validation-mode&gt;NONE&lt;/validation-mode&gt; 添加到我的persistence.xml 但没有效果。如何避免这种@Sizeannotation 验证?

【问题讨论】:

  • @Column(nullable=false)@NotNull 之间的冗余?

标签: validation jsf jpa


【解决方案1】:

您看到的消息是因为一个 faces 消息(可能来自验证器)已发出,但可能尚未显示。

在这种情况下,@Size 注释来自 Bean Validation,并由 JPA 和 JSF 处理。

除非您从支持 bean 手动生成消息(例如通过在您的业务逻辑周围放置一个 try/catch),否则这个消息实际上来自 JSF,并且禁用 JPA 的 persistence.xml 中的任何内容都不会产生影响。

您可以通过在输入组件中嵌套f:validateBean 标记并将disabled 属性设置为true 来禁用JSF 验证。见Temoporarily suppress beanvalidation with JSF

【讨论】:

  • 由于解释完整,我选择了这个作为正确答案,但是@Arjan Tijms 必须将disabled 属性编辑为true 而不是false
【解决方案2】:

您可以通过添加validateBean 标签来禁用特定输入的验证:

<h:outputLabel value="Name: "/>           
<h:inputText id="name"
             value="#{personBean.person.name}"
             validator="#{personValidator.validate}">
    <f:validateBean disabled="true"/>
</h:inputText>
<rich:message for="name"/>

【讨论】:

    猜你喜欢
    • 2014-01-21
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多