2010-05-20 4 views
3

il semble que je ne peux pas envelopper ma tête autour de la façon d'implémenter un ViewProcessor personnalisé dans Jersey. Ihave la ressource suivante:jersey (jsr 311) et personnalisé ViewProcessor

@Path("/events") 
public class EventController extends AbstractController { 
    private static final Logger LOG = LoggerFactory.getLogger(EventController.class); 

    @Resource(name = "eventService") 
    private EventService eventService; 

    public void setEventService(EventService eventService) { 
     this.eventService = eventService; 
    } 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable viewEventsAsHtml() { 
     Map<String, String> model = new HashMap<String, String>(); 
     model.put("msg", "test"); 
     return new Viewable("/events.jsp", model); 
    } 
} 

depuis que je veux organiser mon point de vue jsp dans "/ WEB-INF/vues/jsp" i étendue JSPTemplateProcessor ainsi:

public class CJJspTemplateProcessor extends JSPTemplateProcessor { 
    private static final Logger LOG = LoggerFactory.getLogger(CJJspTemplateProcessor.class); 

    private final String basePath = "/WEB-INF/views/jsp"; 

    public CJJspTemplateProcessor(@Context ResourceConfig resourceConfig) { 
     super(resourceConfig); 
    } 

    @Override 
    public String resolve(String name) { 
     String path; 
     if (!name.endsWith(".jsp")) { 
      name += ".jsp"; 
     } 
     path = basePath + name; 
     LOG.debug("resolving " + name + " to " + path); 
     return path; 
    } 
} 

mais lorsque je navigue à l'événement ressource je reçois un 404, bien que je puisse voir que le TemplateProcessor a résolu le bon chemin pour le jsp dans les fichiers journaux.

PLX aide :)

+0

Pouvez-vous partager votre exemple d'implémentation de JSPTemplateProcessor. – cmani

Répondre

2

Vous n'avez pas besoin TemplateProcessor personnalisé pour faire ce simple ajouter ce qui suit à l'élément filtrant dans votre web.xml.

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

cela a fonctionné mais seulement si j'ai utilisé une configuration de filtre dans web.xml. mais cela ne fonctionne pas lors de l'utilisation d'une configuration de servlet:/ – fasseg

+0

Cela brise également la portabilité JEE si l'application est une application JEE6 déployée dans un conteneur JEE6. –