2010-01-01 2 views
5

Ho creato un controller che esegue una logica aziendale e crea un modello. Se passo questo modello direttamente alla vista restituendo ModelAndView con nome e modello della vista - tutto funziona alla grande. Ma ora voglio visualizzare i risultati su un'altra pagina. Quindi uso il prefisso "redirect:" per reindirizzare a un altro controller, ma il modello viene perso.Spring MVC - passa il modello tra i controller

Cosa mi manca?

saluti, Oleksandr

risposta

0

Dal momento che il prefisso redirect: corre un altro controller, si perde tutto ciò che si aveva in ModelAndView nel controller precedente. Forse il controller della logica di business non dovrebbe essere affatto un controller, forse dovresti semplicemente renderlo una classe regolare e chiamarlo con il controller dei risultati. Quindi il controller dei risultati potrebbe salvare i dati nel modello.

+1

Sì, posso separare la mia logica aziendale in un'altra classe. Ma per far si che questa logica avvenga, ho bisogno di parametri di input. Li ottengo da un utente nel mio primo controller e ho bisogno di un modo per passarli a un altro (risultato) controller, che successivamente chiamerà business logic class. Vedete, la mia difficoltà è passare alcuni dati (in questo caso i parametri di input) tra i controller (controller di dati di ingresso e controller dei risultati). – Oleksandr

4

Opzione 1: È possibile inserire il modello in sessione e riprenderlo nel controller e annullarlo in sessione.

Opzione 2: Lei ha detto, si hanno due controller, prima si potrebbe recuperare l'input dell'utente e fare un po 'la logica di business e reindirizzare ad un altro. Il mio suggerimento è di spostare la logica di business che è posta in entrambi i controller in una classe e di avere un solo controller che restituisca il modello e la vista all'utente.

+1

Ma come posso salvare il modello in sessione usando Spring-MVC con annotazioni. Puoi darmi un esempio? – Oleksandr

+4

ModelAndView mv = new ModelAndView(); mv.addObject ("key1", "value1"); mv.addObject ("key2", "value2"); mv.addObject ("key3", "value3"); request.getSession(). SetAttribute ("model", mv.getModelMap()); – novice

+0

Grazie mille per la risposta! Siamo quasi li. L'unica cosa che non capisco ancora è come memorizzare i parametri in HttpSession con le annotazioni. Ad esempio, @SessionAttributes memorizza i dati tra le richieste all'interno del controller.C'è qualche annotazione che memorizza i dati è sessione in modo permanente. O come possiamo accedere a HttpSession con @RequestParam? Ore c'è un altro modo? – Oleksandr

0

non utilizzare @SessionAttributes in quanto potrebbe cambiare nelle versioni future di primavera. Vorrei rimanere con il vecchia maniera che Oleksandr vi ha mostrato sopra

in qualche modo un vecchio post, ma forse qualcun altro lo troverà utile

11

è possibile utilizzare l'avanti: prefisso che in definitiva fa un RequestDispatcher.forward() insted di The redirect: prefisso.

+0

Questa soluzione ha funzionato per me. Grazie a @Niraj – will824

2

Durante il reindirizzamento: la richiesta viene inviata utilizzando il metodo GET con i parametri aggiunti all'URL. È possibile raddrizzare un nuovo metodo nel controller per ricevere i parametri di richiesta con l'annotazione @RequestParameter. Mentre reindirizzando la richiesta semplice aggiungere tutti i parametri come stringa

e.g ModelAndView mv = new ModelAndView(); 
mv.setViewName(redirect:/your/url); 
mv.addObject("param1", string_param); 
. 
. 
. 

In questo modo è possibile reindirizzare correttamente.