この問題は、次の 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
残念ながら、エラー メッセージを提供しなければならない膨大な数のクラスを考えると、これが実行可能な解決策であるとは思えません。
アップデート
変換エラー メッセージと検証エラー メッセージのみを提供する必要がある理由がわかりました。これらは、プログラマーが制御できないユーザー入力に関連しているためです。ナビゲーション関連の問題などの他のすべてのエラーは、プログラマーが適切に処理する必要があります。このようなエラーはそもそも表示されるべきではないため、これらのメッセージを翻訳しても意味がありません。