2012-10-05 17 views
6

Sto cercando di capire perché viene lanciata l'eccezione.Dove sono impostati i 'parametri mappa' in NoHandlerFoundException?

Penso che sia perché è stato effettuato l'accesso a un portlet in modalità 'visualizzazione', ma per un motivo non so se il contenitore del servlet di primavera non è stato in grado di servire la richiesta, è corretto?

Dove si trova la "mappa dei parametri" sotto l'eccezione impostata?

org.springframework.web.portlet.NoHandlerFoundException: No corrispondenza metodo del gestore trovato per la richiesta Portlet: la modalità 'view', fase 'ACTION_PHASE', i parametri mappa [vuoto]

Ecco il controllore:

@Controller 
@RequestMapping("VIEW") 
public class DetailsController { 
    @RequestMapping("VIEW") 
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) { 
     return "allDetails/details"; 
    } 
} 
+0

mostrando il codice di controllo (e forse una parte del jsp) aiuterebbe molto –

+0

@Jerome Dalbert cosa ti jsp vuoi vedere, quello che reindirizza a "allDettagli/dettagli"? –

+0

la parte JSP (o qualsiasi altra cosa) che chiama il controller –

risposta

6

Ecco tre idee che riesco a trovare (sapere come verrà chiamato il controller). Prova uno di loro, o un mix di loro, e dimmi se ha funzionato.

Idea 1: Rimuovere ("VIEW") per l'annotazione showDetails @RequestMapping.

... 
public class DetailsController { 

    @RequestMapping 
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) { 
     return "allDetails/details"; 
    } 

} 

Questo potrebbe funzionare se la vostra vocazione JSP ha qualcosa di simile: <portlet:actionURL/>: ShowDetails sarebbe il default metodo Render.

Idea 2: Specificare il parametro di azione per l'annotazione del metodo @RequestMapping.

... 
public class DetailsController { 

    @RequestMapping(params = "action=viewDetails") 
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) { 
     ... 
    } 

} 

Questo potrebbe funzionare se la vostra vocazione JSP ha qualcosa di simile:

<portlet:actionURL ... > 
    <portlet:param name="action" value="viewDetails"> 
</portlet:actionURL> 

Idea 3: Aggiungi un metodo vuoto per la fase di azione.

... 
public class DetailsController { 

    @RequestMapping(params = "action=viewDetails") // render phase 
    public String showDetails(final ModelMap modelMap, final RenderRequest renderRequest) { 
     ... 
    } 

    ... 
    // Empty method 
    @RequestMapping(params = "action=viewDetails") // action phase 
    public void actionMethod() { 
    } 

} 

Questo potrebbe funzionare se la vostra vocazione JSP ha qualcosa di simile:

<portlet:actionURL ... > 
    <portlet:param name="action" value="viewDetails"> 
</portlet:actionURL> 
+0

non sono sicuro di ciò che sta chiamando il controller. grazie per la tua risposta –

2

paio di cose da controllare prima qui:

  1. Ci sono dei parametri passati al controller da jsp?
  2. Esiste un metodo di azione predefinito per gestire lo scenario param vuoto?

Ora, se risposta alla prima domanda è sì, allora il vostro JSP dovrebbe avere actionURL tag qualcosa di simile ...

 <portlet:actionURL var="myAction"> 
      <portlet:param name="paramName" value="paramVal" /> 
     </portlet:actionURL> 
     <form:form action="${myAction}"... 

e il suo corrispondente ActionMapping nel controller come ...

 @ActionMapping(params = "paramName=paramVal") 
     public void myAction.... 

E se la risposta alla seconda domanda è no, quindi definire un metodo di azione predefinito nel controller come ...

 @ActionMapping(param="!action") 
     public void defaultAction.... 

Spero che questo aiuti!

Problemi correlati