Невозможно <jsp: включить> в пределах sitemesh <decorator: body /> - PullRequest
0 голосов
/ 02 сентября 2011

Я использую 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>

Надеюсь, я ясно дал понять.

1 Ответ

1 голос
/ 02 сентября 2011

<jsp:include> проблематично использовать с шаблонными фреймворками.По крайней мере, в tomcat тег jsp: include реализован таким образом, что он записывает вывод непосредственно в выходной поток, а не в буфер тега pagecontext.Я не уверен, как sitemesh работает под капотом, но Tiles, например, работает как «стандартная» библиотека тегов, которая записывает выходные данные в стек буферов тегов pagecontext, которые затем выводятся в выходной поток сервлета после визуализации всей иерархии тегов.,Это делает jsp: include эффективно непригодным для использования в контексте Tiles.

Поскольку jsp: include не записывает в буферы тегов, а непосредственно в выходной поток, содержимое будет отправляться не по порядку или не отправляться вообще, в зависимости ото том, как работают теги sitemesh.Возможно, теги sitemesh перенаправляют выходной поток в какой-то нулевой поток при рендеринге.

...