1

私の仕事は、アプリケーションのすべてのメッセージを英語以外の別の言語に翻訳することです。注意が必要な部分は、JSF フレームワーク自体によって生成されるメッセージにあります。特定の変換または検証エラー メッセージをカスタマイズする方法を示すさまざまな記事に出くわしましたが、アプリケーションが生成する可能性のあるすべてのエラー メッセージ (たとえば、認証およびナビゲーション エラー メッセージを含む) をカスタマイズすることに興味があります。

考えられるすべてのエラー メッセージを含むファイルはありますか?

これまでのところ、 ValidationConverter、およびComponentエラーメッセージを含むjsf-api jarにあるMessages.propertiesという名前のファイルに出くわしました。しかし、それだけでは十分ではありません。これら以外にも多くのエラーがあります。

この jar は実際にはjboss-jsf-api_2.1_spec-2.1.28.Final-redhat-1.jarという名前で、jboss-eap\modules\system\layers\base\javax\faces\api\mainフォルダーの下にあります。
この jar 内で、Messages.properties ファイルはjavax\facesパッケージの下にあります。

現在、Red Hat JBoss Enterprise Application Platform - バージョン6.4 .0.GA、JSF 実装バージョン: 2.1 .28.Final-redhat-1を使用しています。

4

1 に答える 1

0

この問題は、次の 2 つの部分に分けることができます。

  1. フレームワークのエラー メッセージを上書きするにはどうすればよいですか?

  2. JSF フレームワークによって生成される可能性のあるすべてのエラー メッセージのリストは何ですか?

パート 1: フレームワークのエラー メッセージのオーバーライド

私のプロジェクトでは、WebContent\WEB-INF の下に、faces-config.xml があり、<message-bundle>resources</message-bundle>. 「resources」は src\resources.properties を指します。この .properties ファイルでは、次のように対応するエントリを追加するだけです

javax.faces.converter.DateTimeConverter.DATE={2}: ''{0}'' non poteva essere inteso come una data.

このようなエラーがアプリケーションによって生成された場合、翻訳されたメッセージが表示されます。ただし、 Cannot override validation error messageからわかるように、src の下での resources.properties ファイルの使用は Maven 固有です。パッケージ技術が異なれば、必要なソリューションも異なる場合があります。

パート 2: すべてのエラー メッセージのリスト

javax.faces.jar http://www.java2s.com/Code/Jar/j/Downloadjavaxfacesjar.htmに含まれるファイルを見ると、次のパッケージが表示されます。

  • javax.faces.application

  • javax.faces.bean

  • javax.faces.component

  • javax.faces.context

  • javax.faces.convert

  • javax.faces.el

  • javax.faces.event

  • javax.faces.lifecycle

  • javax.faces.model

  • javax.faces.render

  • javax.faces.validator

  • javax.faces.view

  • javax.faces.webapp

これらの各パッケージのすべてのクラスについて、このクラスで発生する可能性のあるすべてのエラーについて、resources.properties にエントリを追加する必要があります。しかし、クラスが発生させる可能性のあるエラーは何ですか? そして、resource.properties のエントリはどのように見えるべきでしょうか?

jboss- jsf-api _2.1_spec-2.1.28.Final-redhat-1内の Messages.properties ファイルで見つけたエントリに導かれました。jar (質問で言及しました)。他の多くのエントリの中で、次のエントリがあります。

# ==============================================================================
# Component Errors
# ==============================================================================
javax.faces.component.UIInput.CONVERSION={0}: Conversion error occurred.
javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
javax.faces.component.UIInput.UPDATE={0}: An error occurred when processing your submitted information.

私の IDE (Eclipse) で、インポート ステートメント import javax.faces.component.UIInput;をクリックして UIInput に移動します。クラス。Class File Editor には、次の行があります。

  // Field descriptor #193 Ljava/lang/String;
  public static final java.lang.String CONVERSION_MESSAGE_ID = "javax.faces.component.UIInput.CONVERSION";

  // Field descriptor #193 Ljava/lang/String;
  public static final java.lang.String REQUIRED_MESSAGE_ID = "javax.faces.component.UIInput.REQUIRED";

  // Field descriptor #193 Ljava/lang/String;
  public static final java.lang.String UPDATE_MESSAGE_ID = "javax.faces.component.UIInput.UPDATE";

String フィールドの値は、たとえば javax.faces.component.UIInput.CONVERSION のように、resources.properties に追加する必要があるキーそのものであることに注意してください。

たとえば、javax.faces.validator.RegexValidator クラスのような新しいクラスの場合、次のようにします。クラス ファイル エディタで開き、名前が _ID で終わるフィールドを選択します。

  // Field descriptor #30 Ljava/lang/String;
  public static final java.lang.String VALIDATOR_ID = "javax.faces.RegularExpression";

  // Field descriptor #30 Ljava/lang/String;
  public static final java.lang.String PATTERN_NOT_SET_MESSAGE_ID = "javax.faces.validator.RegexValidator.PATTERN_NOT_SET";

  // Field descriptor #30 Ljava/lang/String;
  public static final java.lang.String NOT_MATCHED_MESSAGE_ID = "javax.faces.validator.RegexValidator.NOT_MATCHED";

  // Field descriptor #30 Ljava/lang/String;
  public static final java.lang.String MATCH_EXCEPTION_MESSAGE_ID = "javax.faces.validator.RegexValidator.MATCH_EXCEPTION";

次のエントリを resources.properties ファイルに追加します。

javax.faces.RegularExpression=custom message
javax.faces.validator.RegexValidator.PATTERN_NOT_SET=custom message
javax.faces.validator.RegexValidator.NOT_MATCHED=custom message
javax.faces.validator.RegexValidator.MATCH_EXCEPTION=custom message

残念ながら、エラー メッセージを提供しなければならない膨大な数のクラスを考えると、これが実行可能な解決策であるとは思えません。

アップデート

変換エラー メッセージと検証エラー メッセージのみを提供する必要がある理由がわかりました。これらは、プログラマーが制御できないユーザー入力に関連しているためです。ナビゲーション関連の問題などの他のすべてのエラーは、プログラマーが適切に処理する必要があります。このようなエラーはそもそも表示されるべきではないため、これらのメッセージを翻訳しても意味がありません。

于 2017-03-29T16:40:49.927 に答える