2013-06-20 16 views
16

Sto utilizzando Spring 3 e Tiles 2 nella mia applicazione e ho un po 'di problemi con il reindirizzamento. Preferibilmente, mi piacerebbe essere in grado di chiamare o reindirizzare da un metodo Controller1 al metodo Controller2, ma fino ad ora non hanno avuto successo.Reindirizzamento da un metodo di controller a un altro metodo di controllo

Ho provato a creare una nuova voce nel file pageviews.properties. In questo modo potevo semplicemente restituire questo nome da Controller1 e cercava il nome della mia tessera def dai file xml.

createRejectionEmail.(parent)=tilesView 
createRejectionEmail.url=createRejectionEmail.page 

redirectRejectionEmail.(class)=org.springframework.web.servlet.view.RedirectView 
rediectRejectionEmail.contextRelative=true 
redirectRejectionEmail.url=createRejectionEmail.page 

Ma, quando cerco di tornare come indicato qui sotto la mia l'URL contiene createRejectionEmail come parte dell'URL - invece di utilizzare che per fare lo sguardo nelle piastrelle defs. mav.setViewName ("redirectRejectionEmail"); return mav;

<definition name="createRejectionEmail.page" extends="brandedLayout"> 
    <put-attribute name="targetFunction" value="status" /> 
    <put-attribute name="content" value="/WEB INF/jsp/pages/status/createRejectionEmail.jsp" /> 
</definition> 

La mia configurazione attuale è inferiore.

<bean id="resourceViewResolver" 
class="org.springframework.web.servlet.view.ResourceBundleViewResolver" 
p:order="0" p:basename="config.spring.viewresolution.pageviews"/> 



<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
<property name="definitions"> 
    <list> 
    <value>/WEB-INF/jsp/**/views.xml</value> 
    </list> 
</property> 
</bean> 

Qualsiasi aiuto e guida sarebbe molto apprezzato!

risposta

38

Dal controller è possibile modificare il tipo di reso in modo che sia un ModelAndView e un codice di ritorno di seguito. Ciò reindirizzare la richiesta e chiamare il controller per il nuovo URL.

return new ModelAndView("redirect:/myURL"); 

In alternativa, è possibile utilizzare HttpServletResponse nel metodo del controller e restituire un reindirizzamento.

public void myController(HttpServletResponse response){ 
response.sendRedirect("/myURL"); 
} 
+0

Ciao grazie per la tua risposta. Ho provato questo e ottengo il seguente. Impossibile risolvere la vista con il nome 'redirect: /myapppath/status/displayEmailRejectionForm.html' in servlet con nome 'Spring-MVC-per-OA'. SHoudl Sto usando un resolver di visualizzazione diverso? Attualmente stiamo usando ResourceBundleViewResolver con tiles2 – Carl

+0

OK Whew! Sta funzionando! Grazie mille per il vostro aiuto. Ho anche dovuto aggiungere UrlBasedViewResolver al mio contesto applicativo. Apprezzo molto che tu abbia trovato il tempo di rispondere! – Carl

+0

Sembra funzionare correttamente anche con il tipo di restituzione String per i metodi annotati @RequestMapping. Come nel caso di Carl, la chiave è aggiungere la configurazione della classe UrlBasedViewResolver. – Marin

6
@RequestMapping(value = "/timeout", method = RequestMethod.GET) 
    public ModelAndView loginForm(HttpServletRequest request,HttpServletResponse response) { 


       return new ModelAndView("redirect:/app/timeout"); 

    } 

Quando questa chiamata gestore di metodo allora redirect al/regolatore/app timeout.

+0

Funziona come un incantesimo, e la cosa migliore è che se la tua applicazione ha un contesto allora questo metodo lo risolve senza bisogno di passare esplicitamente. – deFreitas

Problemi correlati