什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?

Posted

技术标签:

【中文标题】什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?【英文标题】:What is the Grails GSP equivalent of ASP's ContentPlaceHolder? 【发布时间】:2011-11-18 22:52:46 【问题描述】:

我一直在研究 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>

我的问题:我可以在 Grails 的 GSP 中执行相同的默认/覆盖行为吗?

【问题讨论】:

【参考方案1】:

您可以在几天内完成此任务。 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

【讨论】:

杰森,谢谢!我什至没有考虑将render 调用放在默认属性中......将渲染调用放在默认属性中效果很好。谢谢!【参考方案2】:

我想你可以试试。

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

【讨论】:

以上是关于什么是 ASP 的 ContentPlaceHolder 的 Grails GSP 等价物?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET和ASP的区别是什么

ASP.NET和ASP的区别是啥?

什么是Asp?

ASP.NET开发实战——为什么使用ASP.NET

什么是 ASP.NET?

asp是什么, javascript和php,asp区别,什么是 JavaScript 引擎, nodejs和vuejs的关系,nodejs和javascript区别