Trước tiên, hãy để tôi giải thích rằng tôi đang sử dụng Spring MVC 3.1.1 và xác thực Hibernate 4.2.0. Tôi đang sử dụng chú thích xác thực cho các biểu mẫu khác nhau trong ứng dụng Spring của mình. Kể từ khi ứng dụng của tôi cần phải được bản địa hoá, tôi đã sử dụng một bó tài nguyên cho các tin nhắn xác nhận của tôi trông hơi như thế này:Làm cách nào để làm cho Spring hiển thị các thông báo dựa trên gói xác thực khác nhau cho cùng một trình xác nhận hợp lệ trên một lớp?
# ValidationMessages.bundle
FieldMatch=Password and confirmation must match.
Định nghĩa lớp tương ứng cho thông điệp này trông như thế này:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
})
public class RegistrationForm {
// ...
}
Tôi có gói tài nguyên tùy chỉnh này được thiết lập trong appContext.xml của tôi và thư của tôi đang được hiển thị trên biểu mẫu mà không có bất kỳ vấn đề nào.
Đây là tình trạng khó xử của tôi. Có một yêu cầu mới mà tôi phải xác nhận nhiều lĩnh vực phù hợp. Ngay bây giờ tôi chỉ xác nhận rằng hai trường mật khẩu khớp nhau. Bây giờ yêu cầu của tôi là tôi phải xác nhận địa chỉ email. Tôi biết đây là một yêu cầu ngớ ngẩn, nhưng tôi không thể thay đổi nó. Vì vậy, bây giờ định nghĩa lớp sẽ trông giống như sau:
@FieldMatch.List({
@FieldMatch(first = "password", second = "passwordConfirmation")
@FieldMatch(first = "email", second = "emailConfirmation")
})
public class RegistrationForm {
// ...
}
Rõ ràng, gói tài nguyên hiện tại của tôi sẽ không hoạt động vì tôi cần hai thư riêng biệt (một cho mỗi trận đấu). Tôi đã thử sử dụng message="{emails.must.match}"
và sau đó xác định thông báo đó trong gói tài nguyên, nhưng nó không bao giờ thực sự hiển thị thông báo, nó chỉ hiển thị văn bản thực tế {email.must.match}
. Vì vậy, sau khi tất cả những gì giải thích, câu hỏi của tôi là đơn giản: Làm thế nào tôi có thể làm cho mỗi một trong những validator FieldMatch
ở cấp lớp có một thông điệp khác nhau được định nghĩa trong một gói tài nguyên để nó có thể được bản địa hóa?
Cảm ơn bạn đã giúp đỡ!
[EDIT] Đối với những người tò mò, this là trình xác thực FieldMatch
mà tôi đang sử dụng.
CẬP NHẬT 2012/05/23 Dưới đây là những người khác định nghĩa bean đã yêu cầu:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>ErrorBundle</value>
<value>ForgotPasswordBundle</value>
<!-- etc etc -->
</list>
</property>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource" ref="messageSource"/>
</bean>
Điều này đặt tôi vào đúng con đường. Gói của tôi thực sự không được đặt tên 'ValidationMessages.properties' nhưng thay vào đó' ValidationBundle.properties' - khi tôi đổi tên tệp, mọi thứ đã hoạt động và tôi nhận được chuỗi thích hợp. Chúc mừng! –