2

この問題がフォーラムの多くの投稿で議論されていることは知っていますが、Bean 検証用のメッセージをカスタマイズする際にまだ問題があります。たぶん、構成またはファイルの場所に欠けている小さなもの...

検証でメッセージが呼び出されると、Web ページにはメッセージ テキストではなくメッセージ ID が表示されます。

たとえば、ウェブページ {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;

ご支援ありがとうございます!

4

2 に答える 2

10

JSR303仕様の4.3.1.1章に従って、カスタムJSR303検証メッセージファイルには正確な名前ValidationMessages.propertiesが必要であり、クラスパスのルートに配置する必要があります。この場合、フォルダーに直接配置しsrcます。

Bean Validation は JSF の一部ではないことに注意してください。これは、JSF も含まれる Java EE の一部です。JSFは、JSR303 Bean 検証メッセージではなく、<message-bundle>JSF デフォルト検証メッセージ ( に表示されるものなど) の場所のみを定義します。required="true"

于 2011-07-06T09:19:01.170 に答える
3

MessageInterpolator を使用できます。休止状態を使用する場合は、これを試してください

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>
于 2011-09-08T13:38:47.253 に答える