Sitemesh 2 没有装饰我的 JSP
Sitemesh 2 is not decorating my JSPs
我正在尝试使用 Sitemesh 2.4.2 用导航栏装饰一些 JSP,并将我的 CSS 引用提取到这个装饰器中。但是,我无法让它工作:根据我在 decorators.xml
中设置模式的方式,我要么只得到没有装饰器的基础 JSP,要么得到装饰器(这是, <head>
标签的内容,以及 <navbar>
我在 <body>
标签的开头添加的内容)没有来自基础 JSP.[=40= 的内容]
我的应用程序使用 Glassfish 4 作为应用程序服务器,因此使用 Jersey 2。因为我使用 JSPs,所以我使用 Jersey 作为过滤器。
这是我的 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>
最后,JSP我正在尝试用我的导航栏和样式装饰其中一个
<%@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>
如有任何想法,我们将不胜感激。
此致
我的 my_navbar.jsp
文件中缺少这一行:
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
现在可以正常使用了。
我正在尝试使用 Sitemesh 2.4.2 用导航栏装饰一些 JSP,并将我的 CSS 引用提取到这个装饰器中。但是,我无法让它工作:根据我在 decorators.xml
中设置模式的方式,我要么只得到没有装饰器的基础 JSP,要么得到装饰器(这是, <head>
标签的内容,以及 <navbar>
我在 <body>
标签的开头添加的内容)没有来自基础 JSP.[=40= 的内容]
我的应用程序使用 Glassfish 4 作为应用程序服务器,因此使用 Jersey 2。因为我使用 JSPs,所以我使用 Jersey 作为过滤器。
这是我的 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>
最后,JSP我正在尝试用我的导航栏和样式装饰其中一个
<%@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>
如有任何想法,我们将不胜感激。
此致
我的 my_navbar.jsp
文件中缺少这一行:
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
现在可以正常使用了。