Что такое Grails GSP эквивалент ASP для ContentPlaceHolder? - PullRequest
3 голосов
/ 16 сентября 2011

Я много играл с концепциями шаблонов / макетов в Grails GSP. Я использовал макеты / блоки содержимого для имитации поведения главной страницы ASP.

Например, я использую тег <g:pageProperty /> в шаблоне, чтобы оставить «заполнитель», который можно переопределить с помощью тега <content>:

myTemplate.gsp:

<body>
    <g:pageProperty name="page.topDiv" />
</body>


myPage.gsp:

<html>
    <head>
        <meta name="layout" content="myTemplate"></meta>
    </head>
    <body>
        <content tag="topDiv">
           My top div
        </content>
    </body>
</html>

Это прекрасно работает для "добавления" контента в какое-то место в шаблоне. Тем не менее, я действительно хочу поведение, которое я могу получить на главных страницах ASP.NET ... которое должно обеспечивать рендеринг некоторого содержимого по умолчанию и разрешать необязательное переопределение. На главной странице ASP.NET это будет выглядеть так:

myMaster.master:

<asp:ContentPlaceHolder id="something" runat="server">
   <div>Default text/html here</div>
</asp:ContentPlaceHolder>


someOtherPage.aspx:

<asp:Content contentPlaceHolderId="something" runat="server">
    Overriden content here!!  I don't need to override this though :)
</asp:Content>


Мой вопрос:
Могу ли я сделать то же самое поведение по умолчанию / переопределение в GSP Grails?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

Есть несколько разных дней, когда вы могли бы сделать это. g:pageProperty эквивалентен тегу Sitemesh decorator:getProperty, поэтому вы можете использовать атрибут default, чтобы указать используемый по умолчанию текст. Например:

<g:pageProperty name="page.topDiv" default="Default text/html here"/>

Однако я не знаю, как можно получить HTML-контент там. Вы можете использовать тег g:if для проверки этого свойства и указать поведение по умолчанию, если оно не существует:

    <g:if test="${pageProperty(name:'page.topDiv')}">
        <g:pageProperty name="page.topDiv"/>
    </g:if>
    <g:else>
        <div>Default text/html here</div>
    </g:else>

Контент по умолчанию также может находиться во внешнем шаблоне gsp. Затем можно использовать метод render для отображения этого содержимого в атрибуте по умолчанию g:pageProperty:

<g:pageProperty name="page.topDiv" default="${render(template:'topDiv')}"/>

Где в этом случае содержимое по умолчанию будет находиться в _topDiv.gsp.

1 голос
/ 24 августа 2012

Я думаю, что вы можете попробовать вместо этого.

<g:render template=""><g:render>
...