2012-10-05 32 views
6

Estoy tratando de averiguar por qué se lanza la excepción.¿Dónde están los 'parámetros del mapa' en el conjunto NoHandlerFoundException?

Creo que se debe a que se accedió a un portlet en modo 'vista' pero por algún motivo no sé si el contenedor de servlet de muelles no pudo atender la solicitud, ¿es correcto?

¿Dónde están los 'parámetros del mapa' en la siguiente excepción establecida?

org.springframework.web.portlet.NoHandlerFoundException: No juego método de controlador encontrado de solicitud portlet: modo de 'vista', fase 'ACTION_PHASE', los parámetros mapa [vacío]

Aquí es el controlador:

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

mostrando su código de controlador (y tal vez una parte de la JSP) ayudaría mucho –

+0

@Jerome Dalbert lo JSP que hacer ¿quieres ver, el que redirige a "todos los detalles/detalles"? –

+0

la parte JSP (o lo que sea) que llama al controlador –

Respuesta

6

Aquí hay 3 ideas que se me ocurren (saber cómo se llamará el controlador ayudaría). Pruebe uno de ellos, o una combinación de ellos, y dígame si funcionó.

Idea 1: Quite ("VIEW") para la anotación showDetails @RequestMapping.

... 
public class DetailsController { 

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

} 

Esto podría funcionar si su JSP llamando tiene algo como esto: <portlet:actionURL/>: showDetails serían el método predeterminado de render.

Idea 2: Especifique el parámetro de acción para su anotación de método @RequestMapping.

... 
public class DetailsController { 

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

} 

Esto podría funcionar si su JSP llamando tiene algo como esto:

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

Idea 3: Añadir un método vacío para la fase de acción.

... 
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() { 
    } 

} 

Esto podría funcionar si su llamada JSP tiene algo como esto:

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

No estoy seguro de lo que está llamando al controlador. gracias por tu respuesta –

2

Un par de cosas que pueden verificarse en primer lugar:

  1. ¿Hay algún parámetro transferido al controlador desde jsp?
  2. ¿Hay un método de acción predeterminado para manejar el escenario de param vacío?

Ahora bien, si la respuesta a la primera pregunta es sí, entonces su JSP debe tener actionURL etiqueta algo como ...

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

y su correspondiente ActionMapping en el controlador como ...

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

Y si la respuesta a la segunda pregunta es no, defina un método de acción predeterminado en el controlador como ...

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

Espero que esto ayude!

Cuestiones relacionadas