@PostConstruct メソッドでいくつかのコードを実行する jsf アプリケーションがあります。
@PostConstruct
public void init() {
try {
// Do some form preparation
} catch (Exception e) {
try {
FacesContext.getCurrentInstance().getExternalContext().dispatch("error.faces");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
そして、私はこのerror.xhtmlを持っています:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui" template="/templates/main.xhtml">
<ui:define name="title">
<title>#{msg['page.title']}</title>
</ui:define>
<ui:define name="body">
#{msg['global.error']}
</ui:define>
</ui:composition>
ここで、「global.error」と「page.title」をリソース バンドルとして静的にしないようにします。代わりに、必要なメッセージを post コンストラクトのどこかに渡して、error.xhtml が読み取って表示できるようにする必要があります。これは、この画面をすべての画面から参照する必要があるため、検索画面で「検索中にエラーが発生しました」と表示され、別の画面で「データの取得中にエラーが発生しました」または「要求したユーザーがシステムに存在しません」と表示される可能性があるためです。