sinat_28050007 2016-05-05 15:46 采纳率: 57.1%
浏览 2069
已采纳

sitemesh装饰一个用<jsp:include>包含另一个jsp页面jsp页面,不能正常显示

用sitemesh装饰jsp页面,被装饰的jsp页面中用jsp:include包含另一个jsp页面,最终不能正常显示内容。
首先我将sitemesh2.4.2.jar包导入到项目的lib包中,之后编写我的装饰页面,页面很简单:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><decorator:title/></title>
</head>
<body>
<div>
    <div><h1>小系统</h1></div>
    <hr/>
</div>

<decorator:body/>

</body>
</html>

之后我写了一下decorators.xml,代码如下:

 <?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/WEB-INF/decorators">
    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <excludes>
        <pattern>/exclude.jsp</pattern>
        <pattern>/exclude/*</pattern>
    </excludes>

    <decorator name="main" page="decorator.jsp">
        <pattern>/*</pattern>
    </decorator>

</decorators>

然后配置web.xml,在web.xml中添加如下代码:

   <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  </filter>

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

好了,接着我写了一个servlet,通过这个servlet访问下面的list.jsp页面:

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表界面</title>
</head>
<body>
<div><form action="user.do">
<input type="hidden" name="method" value="list"/>
    <table align="center" border=1 cellpadding="0" cellspacing="0" width="800">
        <tr><td colspan="6">请输入要查询的用户名:<input type="text" name="search" /><input type="submit" value="查询"/></td></tr>

        <tr><td>id</td><td>用户名</td><td>用户密码</td><td>用户昵称</td><td>用户类型</td><td>操作</td></tr>

        <c:forEach var="user" items="${page.list }">
            <tr><td>${user.id }</td><td>${user.username }</td><td>${user.password }</td><td>${user.nickname }</td>
            <td>
                <c:choose>
                    <c:when test="${user.type ne true }">超级无敌管理员</c:when>
                    <c:otherwise>普通屌丝</c:otherwise>
                </c:choose>
            </td>
            <td><a href="">修改信息</a>&nbsp;&nbsp;&nbsp;<a href="">删除</a></td></tr>
        </c:forEach>

        <tr><td colspan="6">
            <jsp:include page="/inc/pager.jsp">
                <jsp:param value="${page.totalNum }" name="totalNum"/>
                <jsp:param value="${page.dataCount }" name="dataCount"/>
                <jsp:param value="/shop01/user.do" name="url"/>
                <jsp:param value="method,search" name="params"/>
            </jsp:include>
        </td></tr>
    </table>
</form></div>
</body>
</html>

可是访问结果却是:
图片说明

后来我把上面的list.jsp中的jsp:include标签中的内容注释掉,列表就能正常显示。后来我重新建立项目试了几次,发现只要被sitemesh装饰的页面中含有jsp:include内容,就只能显示jsp:include动态包含的内容和装饰页面的内容。

这是怎么一回事?被装饰页面中原有的内容为什么在有了动态包含之后就不能显示了?求大神解答~~~~

  • 写回答

3条回答

  • sinat_28050007 2016-05-08 06:18
    关注

    还是我自己回答吧。是因为被修饰的页面中的jsp:include的页面中含有

    标签,只要把include的页面的标签去掉就好了
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况