2012-07-27 33 views
1

我有許多使用相同驗證約束的jsf2 web項目。共享庫中的Bean驗證約束條件

  1. 我可以將所有這些約束放在共享庫中嗎?
  2. 如果是,我可以提供驗證消息的轉換嗎?
  3. 如果是的話,我怎樣才能以標準的方式實現它?
  4. 以下包裝結構是否正確?

commons.jar庫:

commons.jar 
    | 
    + library 
    | | 
    | + CustomConstraint1.class 
    | + CustomConstraint2.class 
    | 
    + ValidationMessages_it.properties 
    + ValidationMessages_en.properties 
    + ValidationMessages_de.properties 

回答

1

你的捆綁是正確的一個獨立的罐子。如果您將此jar放入ear/war中,並且它自己的約束和classpath根目錄中的ValidationMessages.properties,它將不起作用。

+0

如果您使用Hibernate 5。2或更高版本,可以通過在http://stackoverflow.com/a/33442715/1108305上按我的回答配置PlatformResourceBundleLocator來解決重複資源問題 – 2015-10-30 18:37:04

2
  1. 我可以把所有這些限制在一個共享庫?

是的,你可以。

  1. 如果是,我可以提供驗證消息的轉換嗎?

是的,這也是可能的。

  1. 如果是,我該如何以標準方式實現它?

例如,你有這樣的約束:

package com.example.constraints; 

@Target({ 
     ElementType.FIELD, 
     ElementType.PARAMETER, 
     ElementType.METHOD 
}) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = { 
    FooValidator.class 
}) 
public @interface Foo 
{ 
    String message() default "{com.example.constraints.Foo.message}"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 
} 

指定類路徑的根目錄(應用程序的默認語言)一ValidationMessages.properties。對於額外的語言環境,您應該指定一個ValidationMessages_[locale].properties文件。對於荷蘭語區域,它應該是ValidationMessages_nl.properties

然後在這些文件中定義你的消息變量作爲密鑰和消息作爲這樣一個值:

com.example.constraints.Foo.message=Foo is not valid 
+0

您好siebz0r,謝謝您的回覆。你可以看看我的問題中的新觀點並更新你的答案嗎?再次感謝您 – Alf 2012-07-27 12:32:08

+0

包裝結構似乎正確。 – siebz0r 2012-07-27 13:55:09

+0

這是一個好消息,但不幸的是它不適合我。如果我把這個庫放在一個web應用程序中,{{com.example.constraints.Foo.message} _顯示爲消息。如果我在另一個位置有一個帶有消息鍵的複合約束,它會有點工作,但如果我在Web-INF/classes文件夾中添加一個ValidationMessages_it.properties(例如),它將停止工作。請參閱http://stackoverflow.com/questions/11599208/multiple-validationmessages-properties – Alf 2012-07-27 14:09:31