Próbuję wyświetlić wyjątek, który wystąpił w kontrolerze na warstwie widoku. W tym celu ustawiłem blok próbny, taki jak:

public String persistUserData( )
{
  try
    {
        //Make DB Call
        // Update DB and get new Data

        model.addAttribute( "updatedData", data );

        throw new Exception("Creating an Exception");

    }
    catch(Exception e)
    {
        model.addAttribute("myException", ex.getClass());

    }

    return "myPage.jsp";
}

Moim zdaniem próbuję go wydrukować za pomocą ${myException}, ale nic nie drukuje. Co tu się dzieje?

1
t0mcat 22 czerwiec 2011, 22:12
Czy na pewno to jest dokładnie ten kod, który testujesz? ${myException} wywoła toString() na wyjątek, jeśli nie ma żadnej wiadomości, otrzymasz pusty/pusty ciąg. Wypróbuj: model.addAttribute("myException", e.getClass());
 – 
Tomasz Nurkiewicz
22 czerwiec 2011, 22:22
Cześć Tomasz, zamierzam wypróbować Twoje rozwiązanie.
 – 
t0mcat
22 czerwiec 2011, 23:00
Tomasz, e.getClass też nic nie pobierał z przodu.
 – 
t0mcat
22 czerwiec 2011, 23:09

3 odpowiedzi

Najlepsza odpowiedź

Przepraszam, że to mówię, ale dla mnie to działa...

@Controller
@RequestMapping("/")
public class MyController {

    @RequestMapping
    public String omg(@RequestParam("name") String name, Model model) {
        try {
            model.addAttribute("name", name);
            throw new Exception("OMG!");
        } catch (Exception e) {
            model.addAttribute("myException", e);
        }
        return "/WEB-INF/foo.jsp";
    }

}

I foo.jsp:

Name: ${name}<br/>
Error was: ${myException}

To renderuje (z domyślną konfiguracją Spring MVC pod http://localhost:8080/app/?name=abc):

Name: abc
Error was: java.lang.Exception: OMG!

Przysięgam!

3
Tomasz Nurkiewicz 22 czerwiec 2011, 23:42
Przepraszam Tomasz, schrzaniłem to. Wywołanie Ajax nadpisało zawartość JSP :(
 – 
t0mcat
23 czerwiec 2011, 07:40

Możesz użyć tego wzoru:

   @Controller
    @RequestMapping("/")
    public class MyController {
         //catch any exception 
         @ExceptionHandler(Exception.class)
          public ModelAndView handleMyException(Exception  exception) {
             ModelAndView mv = new ModelAndView("errorPage);
             mv.addObject("message",exception.getMessage());
             return mv;
                  } 

          @RequestMapping(value="/doSomething", method=RequestMethod.GET)
          public ModelAndView doSomething() {
           /doSomething
         throw new Exception("OMG!");
            return mv;
                  } 

    }

Mam nadzieję, że to pomoże.

1
danny.lesnik 23 czerwiec 2011, 00:31

Z funkcji należy zwrócić model, który będzie wyglądał tak:

return model;

Model powinien być typu ModelAndView.

0
Omnaest 22 czerwiec 2011, 22:17
Ale jestem w stanie uzyskać dostęp do innych modeli zadeklarowanych w tej metodzie, co jest nie tak z wyjątkiem pierwszym.
 – 
t0mcat
22 czerwiec 2011, 22:20
Kod jest nadal niekompletny, ponieważ nie pokazujesz, co dzieje się z polem modelu. Pole modelu jest ważne, musi być zwrócone przez metodę kontrolera, która jest adnotowana za pomocą RequestMapping.
 – 
Omnaest
22 czerwiec 2011, 23:38