我正在使用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>
希望我已经说清楚了。
答案 0 :(得分:1)
<jsp:include>
与模板框架一起使用会有问题。至少在tomcat中,jsp:include标签的实现方式是将输出直接写入输出流,而不是写入pagecontext标签缓冲区。我不确定sitemesh是如何工作的,但Tiles例如作为“标准”标记库,它将输出写入pagecontext标记缓冲区的堆栈,然后在呈现整个标记层次结构后将其输出到servlet输出流。这使得jsp:在Tiles上下文中有效地无法使用。
由于jsp:include不会写入标记缓冲区而是直接写入输出流,因此内容将不按顺序发送,或者根本不发送,具体取决于sitemesh标记的工作方式。可能是sitemesh标记在渲染时将输出流重定向到某个空流。