我有一个具有以下属性的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)]
我已经尝试添加<validation-mode>NONE</validation-mode>
到我的persistence.xml,但没有效果。我如何避免这种@Size
注释验证?
您看到的消息是因为已经发出了faces消息(可能来自验证器),但可能还没有显示。
在本例中,@Size
注释来自Bean Validation,并由JPA和JSF处理。
除非您从您的后台bean手动生成消息(例如,通过在您的业务逻辑周围放置try/catch),否则该消息实际上来自JSF,并且禁用JPA的persistence.xml
中的任何内容都不会产生差异。
您可以通过在输入组件中嵌套f:validateBean
标记并将disabled
属性设置为true来禁用JSF验证。请参阅使用JSF临时抑制bean验证
您可以通过添加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"/>