2012-08-22 74 views
1

我添加了一些註釋(bean驗證)如下,但它們不起作用。註解(bean驗證)不起作用

@NotNull 
@Min(value=3) 
private double salario; 

@NotNull 
@Min(value=5) 
@Max(value=19) 

private Integer codigo; 
@NotNull 
private Date aniversario; 

我導入庫:

com.sun.istack.internal.NotNull import; 
javax.validation.constraints.Max import; 
javax.validation.constraints.Min import; 

我的字段不被驗證。它會是什麼?

謝謝!

回答

1
  1. 你可能有@NotNull錯誤的進口(應該是在javax.validation.constraints包)。如果值爲null,則其他註釋無關緊要。而且,由於您的註釋錯誤,因此double將被允許爲null,但double除外,順便說一句,@NotNull無用,因爲double始終有一個值。

  2. 您確定您的應用程序中包含驗證庫嗎?我不確定jsf(無論你使用的是哪一個)都帶有一個。

你在什麼時候期待驗證發生?如果這是一個jsf託管bean,它很可能會在設置值階段結束時進行驗證。

如果它不是由JSF管理的,則必須通過API驗證自己。

+0

馬特,我糾正了導入,但仍然沒有工作。 (import javax.validation.constraints.NotNull;) – Deb

+0

是使用來自javax.validation.constraints的註釋。我覺得它是內置的,但需要將單獨的jar(或通過構建工具)文件添加到項目中。 – Dexter

0

+1對於馬特。 NotNull導入來自錯誤的包。將其更改爲javax.validation.constraints.NotNull。此外,如果JSR 303實現存在於類路徑中,則這隻能用於開箱即用。從here

在存在bean驗證實現的環境中,JSF自動驗證由UIInput值引用的bean的約束。

此外,<f:validateBean>可用於微調bean驗證行爲。例如,validationGroups屬性可用於驗證的特定成分時,手動指定哪些驗證組應考慮到:

<h:inputText value="#{bean.foo}"> 
    <f:validateBean validationGroups="com.foo.validation.groups.Billable"/> 
</h:inputText> 

當驗證約束失敗,任何相關聯的錯誤消息被自動由JSF翻譯成FacesMessages實施,從而將故障傳達給最終用戶,而不會給應用程序開發人員帶來任何負擔。

空場驗證

在以前的版本中JSF,校驗並沒有應用到與空/空提交值EditableValueHolder的組件。不幸的是,這種行爲限制了實際檢查空/空值的約束的效用,例如JSR 303約束。爲了支持@NotNull和其他類似的約束,JSF 2更改了空/空值驗證的行爲。從JSF 2開始,當存在JSR-303實現時,會驗證null/empty值。

由於這可能會導致遺留的Validator實現出現問題,而這些實現不希望看到空值/空值,因此可以使用javax.faces.VALIDATE_EMPTY_FIELDS上下文參數來禁用此行爲。

+0

Pangea庫已更改,但沒有任何反應,不驗證空字段,也不驗證值爲最小值和最大值的字段。就好像他沒有註釋。 – Deb

-1

嘗試卸載最新的Android SDK構建工具。 轉到Android SDK管理器 - >卸載Android SDK構建工具。