Вложенная задача размещения в полосах - PullRequest
1 голос
/ 24 июня 2011

У меня возникли некоторые проблемы с расположением полос.Я приведу тестовый пример здесь:

Основной макет (main.jsp):

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@include file="/WEB-INF/jsp/common/taglibs.jsp" %>

<s:layout-definition>    

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>{$title}</title>
</head>
<body>
    <s:layout-component name="body"/>
</body>
</html>

</s:layout-definition>

Дополнительный макет, расширяющий основной (sub_main.jsp):

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@include file="/WEB-INF/jsp/common/taglibs.jsp" %>

<s:layout-definition>
    <s:layout-render name="/WEB-INF/jsp/common/main.jsp" title="${title}">
        <s:layout-component name="body">
            This is a test and this is from sub main
            <div style="color: red; font-size: 5em;">
                <s:layout-component name="subheader"/>
            </div>
            ${body}     
        </s:layout-component>
    </s:layout-render>
</s:layout-definition>    

Теперь я использую подосновную схему в следующем коде (test.jsp):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@include file="/WEB-INF/jsp/common/taglibs.jsp" %>

<s:layout-render name="/WEB-INF/jsp/common/sub_main.jsp" title="Test Page">
    <s:layout-component name="subheader">
        This is from the sub header component
    </s:layout-component>
    <s:layout-component name="body">
        This is from body
    </s:layout-component>
</s:layout-render>

Но в браузере я вижу следующее:

Этоэто тест, и это от sub main
Это от тела

Вместо:

Это тест, и это от sub main
Это из подзаголовка компонента
Это из тела

Над всем заголовком отображается как:

"$ title".

Пожалуйста, любое тело может дать мне подсказку о том, что я делаю неправильно?

1 Ответ

1 голос
/ 24 июня 2011

Я заметил, что подзаголовок определен в компоненте body определения sub_main.jsp , я не думаю, что вы можете вкладывать теги компонента как тот. Возможно, вы захотите попробовать использовать выражение EL для подзаголовка (используйте: $ {subheader}).

Может быть, лучше всегда использовать выражения EL вместо тегов компоновщика при отображении содержимого компоновщика и использовать только компоновщики для определения макета. Вы не можете использовать компоненты макета для рендеринга, будучи вложенными в определение макета (такое двойное использование компонента макета является ошибкой проектирования библиотеки и, по моему мнению, приводит к ненужной путанице).

См. Также раздел Вложенные макеты официальной документации Stripes.

...