2011-03-20 33 views
1

以下是我希望能夠在我的JPA實體Bean驗證做到:Bean驗證+資源包的想法?

  1. 相反的@NotNull,我願做@NotNull(message="keyInMyResourceBundleFile")
  2. 我還想參數資源包,和我不知道它的語法,因爲在我看來,消息屬性只包含一個字符串。
  3. 參數本身可能是國際化的。例如,假設resourcebundle參數有一個param屬性,使用英文@NotNull(message="missing.value", params={"credit card"}) String creditCard;它將顯示如下:「字段信用卡缺少所需的值。在印度尼西亞,它將類似於」Nilai harus di isi untuk Kartu Kredit。在這個例子中,我不能硬編碼「信用卡」,因爲在印度尼西亞,它是「Kartu Kredit」
  4. 顯示日誌文件或UI上的資源包中定義的錯誤消息。林不知道如何做到這一點,我應該趕上ConstraintViolationException,獲取消息,並通過我自己的代碼處理資源包?

請分享您對此的看法?

謝謝!

回答

3

關於1 + 2

@NotNull(message="{keyInMyResourceBundleFile}") 

花括號是一個參數替換

關於3

不知道你是什麼之後的指標。沒有params屬性爲@NotNull。我猜你會做

@NotNull(message="{missing.credit.card}")

而且,如果你把它放在另一個屬性只需要調用的關鍵{} missing.name

關於4

ConstraintViolationException包含* ConstraintViolation * s的集合。每個ConstraintViolation包含內插消息以及消息模板。如果你想記錄它,做到這一點...

+0

你能幫助澄清'插入'是什麼意思?它是否與消息屬性的值中的花括號有關?關於沒有3是這樣的:在我的資源包屬性文件中,我有這個簡單的條目:empty.value =字段{0}的值是必需的。我想重用這個「{empty.value}」並傳遞將替換{0}的參數。例如,「需要字段用戶標識的值」或「需要字段密碼的值」。目的是參數化該值,並以某種方式傳遞該值。 – bertie 2011-03-23 17:35:18

+1

對不起,遲到的答案。插值意味着,大括號{}代表您的消息包中的一個鍵。因此,對於@NotNull(message =「{keyInMyResourceBundleFile}」),您需要在屬性文件中使用'keyInMyResourceBundleFile = my message'行。關於3,Bean驗證不知道驗證的字段名稱。如果您使用的是JSF,則可以使用{0},這是一個特殊的標記,它將替換爲字段名稱。這是有效的,因爲JSF通過一個自定義的MessageInterpolator與Bean Validation集成。 – Hardy 2011-03-30 12:52:37

+0

謝謝你的回答。這一切對我來說越來越清晰。想試用帶有BV +消息密鑰的JPA實體,並使用JSF Beans中的實體來存儲狀態,並重新使用BV。希望這會工作得很好。祝我好運 ! – bertie 2011-03-31 17:00:02