2016-06-07 2 views
0

Я пытаюсь использовать Sitemesh 2.4.2 для украшения некоторых JSP с помощью навигационной панели, а также для извлечения ссылок на CSS в этот декоратор. Однако я не могу заставить это работать: в зависимости от того, как я настроил шаблон в своем decorators.xml, я либо получаю только базовый JSP без декоратора, либо декоратор (это содержимое тега <head> и <navbar> Я добавляю в начале своего тега <body>) без содержимого с базы JSP.
Мое приложение использует Glassfish 4 в качестве сервера приложений, поэтому использует Jersey 2. Поскольку я использую JSP, я использую Джерси в качестве фильтра.Sitemesh 2 не украшает мои JSP

Это мой web.xml (я не совсем уверен, что если мне нужна этот FORWARD диспетчер)

<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>SiteMeshFilter</filter-name> 
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>SiteMeshFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <filter> 
    <filter-name>jersey</filter-name> 
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
    <init-param> 
     <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.xxx.jersey2.config.CustomResourceConfig</param-value> 
    </init-param> 
    </filter> 

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

</web-app> 

Моего decorators.xml

<?xml version="1.0" encoding="UTF-8"?> 
<decorators defaultdir="/WEB-INF/decorators"> 
<decorator name="main" page="my_navbar.jsp"> 
    <!--<pattern>/jsp/*</pattern>--> 
    <pattern>/*</pattern> 
</decorator> 
</decorators> 

Здесь, если изменить шаблон для <pattern>/jsp/*</pattern>, то декоратор не будет включен вообще - я бы получил только базовый JSP.
Установив шаблон на <pattern>/*</pattern>, я получаю только декоратор, это, я получаю только содержимое my_navbar.jsp. Кроме того, теги Sitemesh на нем, например <decorator:body />, не будут отображаться вообще, и они появятся в исходном исходном коде веб-страницы, который можно увидеть в браузере.

Это JSP, который будет оформлен, my_navbar.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>Sandbox application</title> 
    <link rel="stylesheet" href="../../js/jquery-1.12.4.min.js"> 
    <link rel="stylesheet" href="../../css/bootstrap.min.css"> 
    <link rel="stylesheet" href="../../js/bootstrap.min.js"> 
    <decorator:head /> 
</head> 
<body> 

<nav class="navbar navbar-light bg-faded"> 
    <ul class="nav navbar-nav"> 
     <li class="nav-item"> 
      <a class="nav-link" href="/sample-jersey2/">Home</a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="/sample-jersey2/movies/list/">Movies</a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="/sample-jersey2/genres/list/">Genres</a> 
     </li> 
    </ul> 
</nav> 

<decorator:body /> 

</body> 
</html> 

И, наконец, один из JSPs я пытаюсь получить украшено моей навигационной панели и стили

<%@page contentType="text/html"%> 
<%@page pageEncoding="UTF-8"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 

<h2>Listing Movies</h2> 
    <table class="table table-striped"> 
     <tr> 
      <th>Name</th> 
      <th>Starring</th> 
      <th>Genre</th> 
     </tr> 
     <c:forEach var="item" items="${it.movies}"> 
      <tr> 
       <td>${item.name}</td> 
       <td>${item.starring}</td> 
       <td>${item.genre}</td> 
      </tr> 
     </c:forEach> 
    </table> 
</body> 
</html> 

Любые идеи на этом было бы весьма признательно.
Привет

ответ

0

я пропускал эту строку в моем my_navbar.jsp файле:

<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %> 

Теперь он работает должным образом.