无法在sitemesh <decorator:body> </decorator:body> </jsp:include>中<jsp:include>

时间:2011-09-02 11:31:39

标签: java sitemesh

我正在使用java和sitemesh。

主体装饰器调用一个Profile.jsp文件,该文件有一个jsp include,如下所示

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

然而,当我添加这个时,包括profile.jsp消失了,我只剩下了serveComments.html(由sitemesh处理,因为标题和boders已经到位。

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>

希望我已经说清楚了。

1 个答案:

答案 0 :(得分:1)

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

由于jsp:include不会写入标记缓冲区而是直接写入输出流,因此内容将不按顺序发送,或者根本不发送,具体取决于sitemesh标记的工作方式。可能是sitemesh标记在渲染时将输出流重定向到某个空流。