3

我有一个具有以下属性的 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"/>

检查 0 < name.length personValidator< 45 是否已存在于数据库中;它工作正常。当我尝试添加一个空名称或大于 45 个字符时,我得到了正确的验证器消息,但在 Glassfish 输出中显示:

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)]

我尝试添加<validation-mode>NONE</validation-mode>到我的 persistence.xml 但没有效果。如何避免此@Size注释验证?

4

2 回答 2

4

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

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

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

f:validateBean您可以通过在输入组件中嵌套标签并将disabled属性设置为 true来禁用 JSF 验证。请参阅使用 JSF 暂时抑制 beanvalidation

于 2012-12-20T20:39:52.633 回答
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"/>
于 2012-12-20T20:35:45.410 回答