0

我正在使用java和sitemesh。

主体装饰器调用 Profile.jsp 文件,其中包含如下的 jsp

<jsp:include page="/serveComments.html" flush="true">
<jsp:param value="78" name="passId"/>
</jsp:include>

但是,当我添加它时,profile.jsp 消失了,我只剩下 serveComments.html (由 sitemesh 处理,因为标题和边框就位。

decorator.xml 如下

<decorators defaultdir="/WEB-INF/sitemesh-decorators">
    <excludes>
        <pattern>/j_spring_security_logout</pattern>
        <pattern>/pages/logout-redirect.jsp</pattern>
        <pattern>*/getMagazine.html*</pattern>
        <pattern>*/serveComments.html*</pattern>

    </excludes>

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

    <decorator name="panel" page="panel.jsp"/>
    <decorator name="printable" page="printable.jsp"/>
</decorators>

希望我已经说清楚了。

4

1 回答 1

1

<jsp:include>与模板框架一起使用是有问题的。至少在 tomcat 中,jsp:include 标记的实现方式是直接将输出写入输出流,而不是写入 pagecontext 标记缓冲区。我不确定 sitemesh 在后台是如何工作的,但 Tiles 例如作为“标准”标签库工作,它将输出写入 pagecontext 标签缓冲区堆栈,然后在呈现整个标签层次结构后将其输出到 servlet 输出流. 这使得 jsp:include 在 Tiles 上下文中实际上无法使用。

由于 jsp:include 不写入标签缓冲区而是直接写入输出流,因此内容将被乱序发送,或者根本不发送,这取决于 sitemesh 标签的工作方式。可能是站点网格标签在渲染时将输出流重定向到某个空流。

于 2011-09-02T11:43:57.783 回答