Spring MVC - Anzeige der Exception in der View (JSP-Seite)
Ich eine Anwendung erstellt haben, in Spring MVC für die Prüfung der rollback-und commit-Funktionalität. Ich bin mit der Transaktion mit. Hier in der service, den ich erstellt habe, einen weiteren Kontakt Objekte ohne Angabe von Mitarbeiter-id, das Feld ist ein Pflichtfeld. Die Anwendung funktioniert gut, wenn die exception kommt beim speichern und rollback arbeiten.
Aber das problem ist das die Ausnahme ist Druck in meiner jsp-Seite.
Kann jemand bitte sagen Sie mir die Lösung für die Verhinderung der Anzeige er-Ausnahme in der te-Ansicht
Controller
@RequestMapping(value="/saveContact", method=RequestMethod.POST)
public String create(@ModelAttribute("newContact")Contacts contact, BindingResult result, SessionStatus status)
{
validator.validate(contact, result);
if (result.hasErrors())
{
return "newContact";
}
contactsDAO.save(contact);
status.setComplete();
return "redirect:viewAllContacts.do";
}
Service
public int save(Contacts contact)
{
int i = 0;
try
{
i = (Integer) sessionFactory.getCurrentSession().save(contact);
Contacts contacts =new Contacts();
contacts.setAddress("ABCD");
contacts.setMobile("8181");
i = (Integer) sessionFactory.getCurrentSession().save(contacts);
}
catch(Exception exception)
{
exception.printStackTrace();
}
return i;
}
BEARBEITEN
@RequestMapping(value="/saveContact", method=RequestMethod.POST)
public String create(@ModelAttribute("newContact")Contacts contact, BindingResult result, SessionStatus status) throws SQLException
{
validator.validate(contact, result);
if (result.hasErrors())
{
return "newContact";
}
try {
contactsDAO.save(contact);
}
catch (Exception ex) {
System.out.println("enrtered");
result.reject("DUPKEY");
ex.printStackTrace();
return "redirect:saveContact.do";
}
status.setComplete();
return "redirect:viewAllContacts.do";
}
- Überprüfen/konfigurieren Frühjahr Ausnahme resolver
- Tatsächlich, als ich sagte, ich habe cretead eine Ausnahme überprüfen Sie die rollback-Funktionalität
- Könnten Sie erklären, was ist die Ausnahme, wenn es die ist, die Sie fangen in Ihren Dienst (und wie es wird erneut ausgelöst, dann) und was bedeutet : der Druck in meiner jsp ? Tut es in der Mitte erscheint der erwarteten Seite oder statt der erwarteten Seite ?
- hier sehen Ausnahme ist nicht das Problem, die Sache ist die sagen wir sind mit einigen Ausnahme während einer Transaktion, da bin ich mit
@Transactional
es gibt keine Notwendigkeit zu definieren, die Transaktion explizit. also, wenn Ausnahme Auftritt, wirft es heraus und zeigt, dass die Ausnahme an den Benutzer, sondern wie kann ich sagen, Benutzer, einige, was ist falsch gelaufen - genau das gleiche wie Hibernate Frühling,
@Transactional
- surround with try/catch? Aber ich bekomme keine Lösung für dieses, können Sie bitte geben Sie einige code, der relevant für die oben genannten code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nie lassen Sie eine Ausnahme in der service Ebene gelangen Sie direkt in Benutzer-browser. Vorgeschlagen von Vinit Prajapati Sie können konfigurieren, dass ein
HandlerExceptionResolver
die entsprechenden Ansichten im Fall einer Ausnahme. Sie können auch eine pro-controller-exception handling mechanisme mit einem oder mehreren@ExceptionHandler
annotierten Methode(N), gefeuert wird bei einem konfigurierten Ausnahme und kann verwendet werden, fast wie@RequestMapping
annotierten Methoden. In letzter Instanz können Sie explizit mit try-catch-Blöcke im controller-Methoden.Auszüge aus Spring Framework Reference Manual : verwenden Sie die @ExceptionHandler Methode annotation innerhalb eines Controllers angeben, welche Methode wird aufgerufen, wenn eine exception eines bestimmten Typs erzeugt wird, die während der Ausführung von controller-Methoden ... Der @ExceptionHandler-Wert kann eingestellt werden, um ein array von Exception-Typen. Wenn eine Ausnahme ausgelöst wird, stimmt mit einem der Typen in der Liste, dann wird die Methode annotiert mit dem passenden @ExceptionHandler wird aufgerufen ... ähnlich wie standard-controller-Methoden, annotiert mit @RequestMapping annotation, die Methode, Argumente und return-Werte von @ExceptionHandler Methoden sind sehr flexibel... Der return-Typ kann eine Zeichenfolge sein, die interpretiert wird als ein view-name oder ein ModelAndView-Objekt.
In meinen eigenen code verwende ich @ExceptionHandler für Allgemeine Fehler wie unzugänglich wären-Datenbank, sondern verwenden Sie try-catch-Blöcke in der Steuerung wenn ich will deal mit Ausnahmen wirklich verursacht durch business-Regeln und für die ich bevorzugt verwenden
<form:errors>
- tags in die Ansicht explizit aufrufenErrors.reject()
im controller.EDIT: konkrete Beispiele
Angenommen, Sie möchten anzeigen spezielle anzeigen im Fall von
DataIntegrityViolationException
Controller
mit
"duplicate"
führt zu einer jsp-wo${msg}
zeigt die Ausnahme-Nachricht. Natürlich für die, die arbeiten, Ihren service werfen muss ein DataIntegrityViolationException ...Wenn Sie prefere Fehler werden angezeigt, in der normalen Ansicht, die Sie tun können, statt
Diesen letzten konstruieren Sie die Anzeige der Fehlermeldung entsprechend
DUPKEY
in Ihrer konfiguriertenMessageSource
Bohne wie andere Globale Fehler in Ihrem jsp-Blick durch den tag<form:errors/>
ohnepath
im es.@ExceptionHandler
und der block , da das, was ich fühle, ist, dass auch Sie, haben ein try-catch innerhalbcontactsDAO.save(contact);
also immer dann, wenn eine Ausnahme Auftritt, wird es verarbeitet und innerhalb des catch-Blockes, wenn wir wieder zurück zu den newContact oder viewAllContacts Ansichten mit der entsprechenden Fehlermeldung@ExceptionHandler
mit Blick gewidmet Ausnahme anzeigen, oder verwenden Sie einen catch-block und halten Sie die Anzeige-Fehler im gleichen Ansicht.@ExceptionHandler
sonst, wenn wir anzeigen wollen, die im selben Ansicht können wir wieder durch das fangen selbst.ObjectError error=new ObjectError("error", "failed"); result.addError(error);
und in der view möchte ich, um es zu drucken, hat auch nicht bekommen was ist dasDUPEKEY
public String create(..., SessionStatus status, Model model)
)model.addAttribute("error", error)
oder fügen Sie einfach die Nachricht an dieBindingResult
die bereits implementiertErrors
überresult.add("FAILED", null, "failed");
- Suche FEHLGESCHLAGEN inMessageSource
- und Standard-string -failed
und anzeigen über<form:errors/>
.catch (Exception ex) { model.addAttribute("error", "failed"); result.reject("DUPKEY"); return "redirect:saveContact.do"; }
und in der Ansicht habe ich${error}
aber nicht drucken nichts, ist es aufgrund der UmleitungErstellen Sie ein Basis-controller-Klasse (die Ihre andere verlängern), und zum Beispiel versuchen, diese Methode (auch wenn Sie wollen, um andere Fehler zu behandeln, die mit verschiedenen Methoden, aber dies wird Ihnen den Einstieg):