首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF2:带有自定义消息包的bean验证

JSF2:带有自定义消息包的bean验证
EN

Stack Overflow用户
提问于 2011-07-06 08:56:09
回答 2查看 8.1K关注 0票数 2

我知道这个问题在论坛的许多帖子中都有讨论,但是我仍然在为bean验证定制消息时遇到了问题。也许在配置或文件位置上遗漏了一些小东西..。

当验证调用消息时,网页将显示消息ID而不是消息文本。

例如,我在网页{messages.myMessageId}中看到

我有:

src/com/myapp/view/validationvalidation_en.poperties

代码语言:javascript
复制
webuser_name_notnull = Name is required

faces-config.xml

代码语言:javascript
复制
<message-bundle>
        com.myapp.view.validation
</message-bundle>

webuser.java

代码语言:javascript
复制
@NotNull(message = "{webuser_name_notnull}")
private String name;

非常感谢您的支持!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-06 09:19:01

根据JSR303规范的第4.3.1.1章,定制的JSR303验证消息文件需要确切的名称ValidationMessages.properties,并且它需要放置在类路径的根中,因此在您的情况下直接放在src文件夹中。

请注意,Bean验证不是JSF的一部分。它是Java的一部分,JSF也是其中的一部分。JSF只定义<message-bundle>默认验证消息的位置(比如您在required="true"上看到的),而不是JSR303 Bean验证消息。

票数 10
EN

Stack Overflow用户

发布于 2011-09-08 13:38:47

你可以用MessageInterpolator。如果您使用hibernate,请尝试如下

代码语言:javascript
复制
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/validation.xml

代码语言:javascript
复制
<?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>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6593845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档