Jeśli w mojej warstwie biznesowej występuje wyjątek (np. Wyjątek SQL w moim komponencie bean połączenia JDBC), w jaki sposób mogę go propagować z niestandardowym komunikatem do globalnej strony error.jsp
?Ogólna obsługa wyjątków JSF 1.x
Odpowiedz
Ogólnym sposobem wyświetlania komunikatu o błędzie do użytkownika w JSF jest użycie FacesMessage:
Na stronie Java:
...
if (errorOccurred) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("An error occurred blabla..."));
}
i JSF (JSP lub XHTML) stronie, wystarczy użyć <h:messages/>
element na twojej stronie, aby wyświetlić błąd.
JSF 1.x nie dostarcza żadnych niejawny obsługę błędów tego typu, choć można przekierować na stronę błędu, stosując zasady nawigacji (zakładając tworzą post) ...
<navigation-case>
<description>
Handle a generic error outcome that might be returned
by any application Action.
</description>
<display-name>Generic Error Outcome</display-name>
<from-outcome>loginRequired</from-outcome>
<to-view-id>/must-login-first.jsp</to-view-id>
</navigation-case>
... lub za pomocą przekierowania ...
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String url = extContext.encodeActionURL(extContext
.getRequestContextPath()
+ "/messages.faces");
extContext.redirect(url);
Polecam patrząc na JSF specification więcej szczegółów.
Komunikaty o błędach można umieszczać w zakresie żądań/zakresie sesji/parametrach URL, zgodnie z własnymi upodobaniami.
Zakładając kontener serwletów, można użyć zwykłej web.xml error page configuration.
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errorPage.faces</location>
</error-page>
W swojej podkładowej fasoli, można owinąć i rzucać sprawdzonych wyjątków w RuntimeException s.
Niektóre implementacje/frameworki JSF wychwycą te błędy (Apache MyFaces/Facelets), więc będziesz musiał configure them not to.
Można umieścić
<%@ page errorPage="error.jsp" %>
w jour JSP/JSF stronie. W error.jsp, by mieć jou:
<%@ page isErrorPage="true" %>
isErrorPage = „true” poda swoją stronę innego niejawny obiektu: wyjątek (w ten sam sposób masz już wniosek i odpowiedzi na stronie JSP). Następnie można wyodrębnić wiadomość z wyjątku.
JSF 2 ma teraz mechanizm rozpatrywania wyjątkami:
http://java.sun.com/javaee/6/docs/api/javax/faces/context/ExceptionHandler.html
doszedłem do tego samego problemu i znaleźć link, opisując w jaki sposób można wykorzystać ExceptionHandler w JSF2:
http://jugojava.blogspot.com/2010/09/jsf-2-exception-handling.html
Zrobiłem stronę błędu w stronach strony i umieścić stacktrace błędu Ten kod najpierw umieścił go w Internecie.xml
<error-page>
<error-code>500</error-code>
<location>/errorpage.jsf</location>
</error-page>
Choć strona JSF miał ten kod
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head>
<h:outputStylesheet name="EstilosOV.css" library="css" />
<!-- <h:outputScript name="sincontext.js" library="scripts"/> -->
</h:head>
<h:body >
<table width="338" border="0" align="center" bordercolor="#FFFFFF">
<tr bgcolor="#1D2F68">
<td colspan="4" height="35" class="TablaHeader2"> PLAN SEGURO</td>
</tr>
<tr bgcolor="#FDF2AA">
<td colspan="4" class="HeaderExcepcion">
<h:graphicImage library="images" name="errormark.jpg"/>
<font size="5px" color="#CC0000" >Error de ejecución</font>
</td>
</tr>
<tr >
<td colspan="3" class="anuncioWarning2">Ocurrio un error al realizar la operación, favor de intentarlo nuevamente, si el error aún se presenta, favor de notificarlo a soporte técnico al 5147-31-00 extensión 6893</td>
</tr>
<tr>
<td height="17" colspan="3" class="TablaHeader2"></td>
</tr>
</table>
<h:form id="formerror">
<h:inputHidden id="valuestack" value="#{errorDisplay.stackTrace}"></h:inputHidden>
</h:form>
</h:body>
</html>
pamiętać, że motyw umożliwia debugowanie StackTrace dla reazon wiedzieć, co jest wyjątkiem w polu ukrytym. Zobaczmy jak klasa jest zdefiniowana odzyskuje StackTrace
public class ErrorDisplay implements Serializable{
private static final long serialVersionUID = 6032693999191928654L;
public static Logger LOG=Logger.getLogger(ErrorDisplay.class);
public String getContacto() {
return "";
}
public String getStackTrace() {
FacesContext context = FacesContext.getCurrentInstance();
Map requestMap = context.getExternalContext().getRequestMap();
Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
StringWriter writer = new StringWriter();
PrintWriter pw = new PrintWriter(writer);
fillStackTrace(ex, pw);
LOG.fatal(writer.toString());
return writer.toString();
}
private void fillStackTrace(Throwable ex, PrintWriter pw) {
if (null == ex) {
return;
}
ex.printStackTrace(pw);
if (ex instanceof ServletException) {
Throwable cause = ((ServletException) ex).getRootCause();
if (null != cause) {
pw.println("Root Cause:");
fillStackTrace(cause, pw);
}
} else {
Throwable cause = ex.getCause();
if (null != cause) {
pw.println("Cause:");
fillStackTrace(cause, pw);
}
}
}
}
i już przywiązany jak zakończyć tę definicję fasoli w facesconfig plików
<managed-bean>
<description>
Bean que sirve para llenar la especificacion de un error. Stacktrace
</description>
<managed-bean-name>errorDisplay</managed-bean-name>
<managed-bean-class>mx.com.tdc.datos.page.bean.ErrorDisplay</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
I mam nadzieję, że będzie to służyć
- 1. Usługi WCF REST - Ogólna obsługa wyjątków
- 2. Migrowanie JSF 1.1 z Ajax4jsf 1.x do JSF 2
- 3. Obsługa wyjątków w Linuksie
- 4. Obsługa wyjątków Python
- 5. Obsługa wyjątków ASP.NET MVC
- 6. EJB 3.0 Obsługa wyjątków
- 7. Obsługa wyjątków NHibernate
- 8. Obsługa wyjątków węzła
- 9. Obsługa wyjątków w wątkach
- 10. Camel - Obsługa wyjątków w
- 11. Obsługa wyjątków Wcf
- 12. Obsługa wyjątków w R
- 13. Obsługa wyjątków Spring Resttemplate
- 14. NSFileHandle writeData: obsługa wyjątków
- 15. Obsługa wyjątków pracowników tła
- 16. Jak dołączyć CSS do ścieżki kontekstu w JSF 1.x?
- 17. LLVM MCJIT/SEH Obsługa wyjątków
- 18. Obsługa wyjątków w rdzeniu asp.net?
- 19. Obsługa błędów STL bez wyjątków
- 20. Obsługa wyjątków w rozszerzeniach Chrome
- 21. Obsługa wyjątków przez Reactor Wiosna
- 22. Obsługa wyjątków dla wielu tras
- 23. Jak działa obsługa wyjątków Haskell?
- 24. Obsługa wyjątków w Obj-C
- 25. Obsługa wyjątków API w RxJava
- 26. Reflection.Emit.ILGenerator Obsługa wyjątków „Leave” Instrukcja
- 27. Obsługa licencji TPL i wyjątków
- 28. Obsługa wyjątków globalnych w VB
- 29. Obsługa wszystkich wyjątków oprócz jednego
- 30. Obsługa wyjątków ObjC w monotouch
był to doskonała odpowiedź, chciałbym dać ci 10 punktów za twoją odpowiedź. –