[英]JSF2: bean validation with custom message bundle
我知道論壇中的許多帖子都討論了這個問題,但是我仍然在為 bean 驗證自定義消息時遇到問題。 也許配置或文件位置中缺少一些小東西......
當驗證調用消息時,web 頁面顯示消息 ID 而不是消息文本。
例如,我在 web 頁面 {messages.myMessageId} 中看到
我有:
src/com/myapp/view/validationvalidation_en.poperties
webuser_name_notnull = Name is required
面孔-config.xml
<message-bundle>
com.myapp.view.validation
</message-bundle>
webuser.java
@NotNull(message = "{webuser_name_notnull}")
private String name;
非常感謝您的支持!
根據JSR303 規范的第 4.3.1.1 章,自定義 JSR303 驗證消息文件需要具有確切的名稱ValidationMessages.properties
並且需要放置在類路徑的根目錄中,在您的情況下,直接放在src
文件夾中。
請注意,Bean 驗證不是 JSF 的一部分。 它是 Java EE 的一部分,其中 JSF 也是一部分。 JSF <message-bundle>
僅定義 JSF 默認驗證消息的位置(例如您在required="true"
上看到的那個),而不是 JSR303 Bean 驗證消息。
您可以使用 MessageInterpolator。 如果您使用 hibernate 試試這個
public class ResourceBundleMessageInterpolator extends org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator implements
MessageInterpolator {
@Override
public String interpolate(String message, Context context, Locale locale) {
// evaluate el expression
if (message != null && message.startsWith("#{")) {
FacesContext facesContext = FacesContext.getCurrentInstance();
Application app = facesContext.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = facesContext.getELContext();
ValueExpression valueExp = elFactory.createValueExpression(elContext, message, Object.class);
Object value = valueExp.getValue(elContext);
if (value == null) {
return null;
} else {
return value.toString();
}
} else {
return super.interpolate(message, context, locale);
}
}
}
最后你需要 META-INF/validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration">
<message-interpolator>package.ResourceBundleMessageInterpolator</message-interpolator>
</validation-config>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.