代码之家  ›  专栏  ›  技术社区  ›  fasseg

泽西岛(JSR 311)和自定义视图处理器

  •  3
  • fasseg  · 技术社区  · 16 年前

    我似乎无法理解如何在泽西岛实现定制的视图处理器。我有以下资源:

    @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);
        }
    }
    

    由于我想在“/WEB-INF/VIEWS/JSP”中组织我的JSP视图,因此扩展了JSP模板处理器:

    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;
        }
    }
    

    但是当我导航到事件资源时,我得到一个404,尽管我可以看到模板处理器在日志文件中解析了JSP的正确路径。

    PLX帮助:

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alex Winston    16 年前

    您不需要自定义模板处理器来执行此操作,只需将以下内容添加到web.xml中的filter元素。

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