2012-01-23 9 views
6

Estoy intentando utilizar el patrón MVX JAX-RS '(Jersey). Los intentos de llegar a http://localhost:8080/myproject/foos/test resultado de un error que dice:No se puede conectar el servicio JAX-RS a la plantilla MVC

java.io.IOException: The template name, /view, could not be resolved to a fully qualified template name 

http://localhost:8080/myproject/foos resultados en el mismo error.

¿Qué me estoy perdiendo?

de recursos:

package resources; 

import com.sun.jersey.api.view.Viewable; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("foos") 
public class FooResource { 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable get() { 

     return new Viewable("/index", this); 

    } 

    @GET 
    @Path("{id}") 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable get(@PathParam("id") String id) { 

     return new Viewable("/view", id); 

    } 

} 

Vistas:

WEB-INF/jsp/recursos/FooResource

  • index.jsp
  • view.jsp

Web .xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

    <filter> 
     <filter-name>jersey</filter-name> 
     <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
      <param-value>/(resources|images|js|styles|(WEB-INF/jsp))/.*</param-value> 
     </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>jersey</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <servlet> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <description>Set the default, base template path to the WEB-INF folder.</description> 
      <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
      <param-value>/WEB-INF/jsp</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>ServletAdaptor</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

</web-app> 

Respuesta

5

realizado los siguientes cambios:

Web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <session-config> 
     <session-timeout>30</session-timeout> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>welcome.jsp</welcome-file> 
    </welcome-file-list> 

    <filter> 
     <filter-name>jersey</filter-name> 
     <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>controllers</param-value> 
     </init-param>   
     <init-param> 
      <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
      <param-value>/((WEB-INF/views))/.*</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
      <param-value>/WEB-INF/views/</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.feature.Redirect</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name> 
      <param-value>true</param-value> 
     </init-param>   
    </filter> 
    <filter-mapping> 
     <filter-name>jersey</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

de recursos:

@Path("foos") 
public class FooResource { 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable index() { 

     return new Viewable("/foos/index", this); 

    } 

    @GET 
    @Path("{id}") 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable view(@PathParam("id") String id) { 

     return new Viewable("/foos/view", id); 

    } 

} 

Vistas:

  • \ welcome.jsp
  • \ WEB-INF \ views \ Foos \
    • index.jsp
    • view.jsp
0

De la inspección inicial, creo que desea poner index.jsp y view.jsp directamente en WEB-INF/jsp.

0

El nombre debe ser un nombre completo como /index.jsp o /index.html.

1

tuve este mismo error se ejecuta en el embarcadero 9. La aplicación funcionó muy bien usando mvn limpia embarcadero: ejecute pero tuvo este error cuando se empaquetó como una guerra y se implementó en Jetty. Esta es la solución en web.xml que funcionó para mí:

  <init-param> 
      <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
-   <param-value>/WEB-INF/views/</param-value> 
+   <param-value>/WEB-INF/views</param-value> 
     </init-param> 

Sí, eso es todo. Entonces, con suerte, esto ayuda a alguien que tropieza con esto. Mi configuración es básicamente la misma que la de Craig, pero tenía una barra extra.

Cuestiones relacionadas