response.sendError() von Bean aus

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

ich möchte aus einer Bean heraus auf eine Fehlerseite umleiten (beim Zugriff auf den Getter eines Property, wenn da ein Fehler bemerkt wird)

Code:
HttpServletresponse.sendError()

sollte das ja machen. Mit diesem Code habe ich meinen Versuch gestartet:

Code:
		FacesContext facesContext = FacesContext.getCurrentInstance();

		HttpServletResponse resp = (HttpServletResponse)facesContext.getExternalContext().getResponse();
		try {
			System.out.println("Umleitung");
			resp.sendError(HttpServletResponse.SC_FOUND);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		facesContext.responseComplete();

Allerdings fliegt an der Stelle mit dem sendError() folgende Exception:
Code:
SCHWERWIEGEND: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalStateException
	at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:421)
	at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
	at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)

Was mache ich verkehrt?
 
M

maki

Gast
Solabld irgendetwas in den Response Body geschrieben wurde, darfst du keine Header mehr setzen.

Was mache ich verkehrt?
Ich würde sagen dass du etwas grundsätzlich "un-JSF" machst.

actionListener: werte aus der View setzen, eben logik um daten aus den Views rauszuziehen, interne Status in der MBean setzen, etc.

action: internen status in der MBean prüfen und anhand dessen die nächste View aufrufen, also nur sagen welche view als nächstes kommt ohne große logik

IMHO komischer Fall, dass ein Fehler beim Zugriff auf den getter entdeckt wird.
 

freez

Top Contributor
ok. konkretisiere ich mal:

in einem Getter hole ich mir Daten aus der Datenbank, und bestücke das Property mit den Daten aus der Bank :). Nun kann es passieren, dass keine Daten kommen, weil die Ergebnissmenge leer ist. An der Stelle muß ich den User auf ne Fehlerseite umleiten, da sonst die Seite wieder angezeigt wird ohne richtigen Inhalt. Das ist ne Ausnahme, und da muss der User auf ne Fehlerseite geleitet werden (Eigentlich wäre es ja cool, wenn ich nur ne bestimmte Exception werfen müsste, und der Server leitet automatisch auf 404 um :)).

Wenn ich das nicht in dem Getter machen darf ... wie oder wo mache ich das dann? Bin ja flexibel :)
 

HLX

Top Contributor
Der Fehlercode 404 bedeutet URL nicht gefunden. Das ist ja wohl nicht das richtige.

Du solltest eine eigene Fehlerseite definieren - findet der Anwender bestimmt schöner als die üblichen HTTP-Fehlermeldungen. Die Seite kannst du dann in der web.xml mit Exceptions in Verbindung bringen:
Code:
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/errorpage.jsp</location>
</error-page>

Im übrigen finde ich eine Exception bei einer leeren Ergebnismenge etwas hart.
 

freez

Top Contributor
@HLX: Naja, der Hintergrund ist folgender: Der User könnte die JSF Seiten direkt aufrufen. Da in der Session wichtige Daten fehlen, kann die Seite nicht richtig angezeigt werden. Genauso sieht es aus, wenn die Session abläuft. Der User hat sein Browser noch ne Stunde offen, und klickt dann auf einen Link in der Anwendung. Dann sind alle Daten aus der Session weg und die Seite kann nicht richtig dargestellt werden.

Ich habe schon versucht diesen Fall auf ein paar wenige Fälle zu begrenzen(mit Session TimeOut 60Minuten und Cookies), aber diese Ausnahme (deutsch für "exception" :)) möchte ich einfach behandeln.

Habe ich da vielleicht ein DesignFehler und könnte das Problem mit dem direkten Aufruf der Seiten und den abgelaufenen Sessions anders lösen? Auch die 60 Minuten Session TimeOut halte ich für viel. Was nimmt man da sinnvollerweise.
 

HLX

Top Contributor
20 min. dürften reichen.

Da gibt es sicher geschicktere Wege als eine Exception beim Daten holen, da es wahrscheinlich ist, das dieser Zustand auch gewollt eintreten kann.
Eine Möglichkeit den direkten Aufruf der JSP zu verhindern wäre ein entsprechendes URL-Pattern in der web.xml, dass auf ein Servlet umleitet. Eine andere Möglichkeit ist ein Servlet-Filter, der die Daten neu initialisiert, wenn die Session abgelaufen ist. Im zusammenhang mit JSF gibt´s sicher noch andere Lösungen. Bin da im Moment nicht auf dem aktuellen Stand.
 

freez

Top Contributor
Thx HLX

Die Infos waren schon gut. Ich werde mal nen neuen Thread öffnen und nach Best Practise Methoden fragen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand REST Json Response Mapping ist null Allgemeines EE 2
G Response bei Servlets Allgemeines EE 5
G Http request bekommen parsen und response senden Allgemeines EE 1
R JSF Entitybean direkt in Sessionscoped Bean referenzieren Allgemeines EE 2
I Session löschen in Bean (Session Beans) Allgemeines EE 1
J Hello World mit Stateless Session Bean - Was mache ich falsch? Allgemeines EE 2
J Unterschied zwischen HttpSession und Stateful Session Bean Allgemeines EE 3
R Wie eine stateful session bean erneut "aufgreifen" Allgemeines EE 22
B [EJB] javax.inject.DefinitionException: bean not a Java type Allgemeines EE 5
T Einstieg in J2EE: Remote auf Bean zugreifen Allgemeines EE 11
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
P Unterschied Session Scope / Stateful Session Bean Allgemeines EE 6
A Im PhaseListener auf Stateful Session Bean zugreifen Allgemeines EE 6
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
2 JSTL Tags für eine Bean? Allgemeines EE 4
M Spring: Bean als Webservice freigeben Allgemeines EE 9
D Problem mit EJB: Bean soll Objekt eigener Klasse zurückgeben Allgemeines EE 2
V JSP BEAN Speichern von einer Zahl nach eingabe Allgemeines EE 2
H Bean Vergleich.gibts da schon was Feines? Allgemeines EE 13
B unterschied servlet und bean Allgemeines EE 2
A Session Bean mit Local-Interface nutzen Allgemeines EE 3
J prozesse aus der application-bean threadfähig? Allgemeines EE 4
G JSF dynamsiche style zuweisung aus Backing Bean Allgemeines EE 3
G Objekt von jsp an set Methode von Bean übergeben! Allgemeines EE 2
N Lokation von Bean Klassen? Allgemeines EE 5
M JSF Bean-Property mit Parameter aufrufen Allgemeines EE 12
M JSF & EJB "Bean not bound" Problem Allgemeines EE 4
R Zugriff auf Managed Bean aus einem Filter Allgemeines EE 2
boxi JSF von einem Bean auf ein anderes Bean zugreifen Allgemeines EE 3
J Bean in der init-Methode des Servlets instanzieren Allgemeines EE 9
Y JSF - einzelne Bean zerstören/ungültig machen Allgemeines EE 2
S In einer Bean-Methode an ndere Beans kommen Allgemeines EE 7
ichbindiegute Performance von Entity Bean create vs. JDBC insert Allgemeines EE 11
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
A Selbstreferenzierter Entity-Bean Allgemeines EE 3
V Bean-Daten in JSF-JSP finden Allgemeines EE 3
G Entity Bean ignoriert Datenbank Allgemeines EE 16
J In einem Bean zugriff auf ein SessionBean? Allgemeines EE 2
F Session Bean -> Daten aus dem Servlet holen Allgemeines EE 11
F Package beim Cookie-setzten über BEAN nicht gefunden Allgemeines EE 4
M STRUTS/Cannot retrieve definition for form bean null on acti Allgemeines EE 4
E Methoden einer Bean aufrufen? Allgemeines EE 4
P jsf SelectOneMenu: Bean als SelectItem Value Allgemeines EE 5
P Struts Form Bean vs. Session Variable Allgemeines EE 6
G Exception creating bean of class . (Struts) Allgemeines EE 8
T statische Methoden versus Application-Bean Allgemeines EE 2
N Duplicate Bean Name (Tomcate 5.X, JDK 1.5) Allgemeines EE 2
M Unterschied zwischen Servlet und Bean/EJB Allgemeines EE 2
flashfactor Logging in einem Session-Bean Allgemeines EE 2
N Einbindung einer Bean in eine JSP (Tomcat-Server 5.5.x) Allgemeines EE 2
H Sichtbarkeit von Bean-Modifikationen? Allgemeines EE 2
H JSP, Session und Java-Bean Allgemeines EE 4
R html-form mit bean:write Allgemeines EE 10
R Use bean in scriptlet in struts Allgemeines EE 4
N Deployen einer EJB3.0 Bean Allgemeines EE 4
M Session Bean vers. Entity Bean Allgemeines EE 3
U Enterprise Bean mit dynamischer Datenbankauswahl? Allgemeines EE 3
T Filesystemzugriff von einer Bean? Allgemeines EE 6
C Mail von einer Session Bean aus senden Allgemeines EE 2
C Message Driven Bean soll keine Nachrichten empfangen Allgemeines EE 4
A Begriffe MBean JMX-Bean? Allgemeines EE 2
K JAVA BEAN DB Connection Prob Allgemeines EE 5
B Kein definiertes Bean? --- JDeveloper Allgemeines EE 5
C JSP mit java Bean Allgemeines EE 22
T Bean übertragen von Servlet zu Servlet Allgemeines EE 9
T Variablen von Bean über Servlet setzen Allgemeines EE 5
S XML parsen in Bean Allgemeines EE 2
G Instanzvariablen mit Strings in Bean vergleichen... Allgemeines EE 3
S Struts: Problem mit <bean:message> - Tag Allgemeines EE 1
A Kommunikation zwischen Java Servlet und Bean Allgemeines EE 1

Ähnliche Java Themen

Neue Themen


Oben