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"/>

personValidator0 <name.length <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>永続性.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 に答える