JSF ruft Methoden auf, wenn der verwaltete Bean-Konstruktor 404 ERROR CODE @ sende

In einem JSF-verwalteten Bean-Konstruktor lade ich eine Entität aus der Datenbank, indem ich einen Anforderungsparameter verwende. Manchmal befindet sich die Entität nicht in der Datenbank und ich möchte eine andere JSF-Seite (.xhtml) mit einer 404-Nachricht anzeigen.
Dies ist ein Beispiel für eine verwaltete Bohne:

@ManagedBean(name = "someBean")
@RequestScoped
public class SomeBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private SomeData someData;

    public SomeBean() throws IOException {
        someData = ... loads from database using JPA features
        if(someData == null){
              HttpServletResponse response = (HttpServletResponse) FacesContext
                    .getCurrentInstance().getExternalContext().getResponse();
              response.sendError(404);
        }
    }

    public SomeData getSomeData(){
        return someData;
    }
}

Ich habe die Datei web.xml in etwa so konfiguriert:

<error-page>
   <error-code>404</error-code>
   <location>/404.xhtml</location>
</error-page>

Ich habe eine JSF-Seite, um die von der verwalteten Bean geladene Entität zu behandeln. Wenn die Entität existiert, werde ich sie auf der Seite verwenden. So wie das

<h1>#{someBean.someEntity.name}</h1>
<h2>#{someBean.someEntity.description}</h2>
<ui:repeat value="#{someBean.someEntity.books}" var="book">
// ..........
</ui:repeat>

Die obige Seite funktioniert, wenn die verwalteten Daten erfolgreich geladen wurden.

Das Proble

Wenn die Entität nicht existiert und ich einen 404-FEHLERCODE sende, verarbeitet die JSF weiterhin die in der Ausdruckssprache der ersten Seite definierten Methoden.
Dieses Verhalten führt dazu, dass die verwaltete Bean eine NullPointerException und einen HTTP 500-ERRO-CODE auslöst.
Meine 404-Fehlerseite wird nicht aufgerufen. Keine Ahnung warum

Ich versuche, den 404-Fehler zu senden, auch wenn die Entität in der Datenbank gefunden wurde und die 404-Fehlerseite funktioniert.

ann jemand dieses JSF-Verhalten diesem Glück erklären? Oder bieten Sie eine Art an, um die 404-Fehlerseite ohne URL-Änderung anzuzeigen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage