如何从布局文件将变量传递到grails模板?

Mik*_*uts 14 grails layout templates

所以我有一个导航模板(/common/_navigation.gsp),它在Grails项目主布局文件(/layouts/main.gsp)中呈现.如何将某些变量/参数/ arg从单个视图文件传递到布局并最终传递到导航模板中?我只是希望当我在页面上时突出显示正确的选项卡.

(我们已经尝试过使用Grails Navigation Plugin.由于我们有不同的标签指向相同的控制器(相同的视图,不同的过滤器),它会崩溃.)

Col*_*ton 20

我一直这样做.在我看来,我可以手动或通过在我正在渲染的视图中使用参数标记将属性附加到页面.它没有在Grails用户指南中记录,但它超级方便.

<parameter name="foo" value="bar" />
Run Code Online (Sandbox Code Playgroud)

然后我将使用pageProperty标记访问页面属性.

<g:set var="activeNavItem" value="${pageProperty(name: 'page.foo')}"/>
Run Code Online (Sandbox Code Playgroud)

布局根本不需要处理这个变量:-)


Umi*_*mit 18

只需使用示例的模型参数:view:

<g:render template="../path/template" model="[header:'test', headers:['a','b'], values:[['a':1,'b':2],['a':3,'b':4]] ]"/>
Run Code Online (Sandbox Code Playgroud)

_模板:

<br/>
    <h3>${header}</h3>
    <table>
      <thead>
        <tr>
          <g:each in ="${headers}" var="he">
            <th>${he}</th>
          </g:each>
        </tr>
      </thead>
      <tbody>
        <g:each in ="${values}" var="v">
              <tr>
                <g:each in ="${headers}" var="h">
                  <td>${v[h]}</td>
                </g:each>
              </tr>
          </g:each>
      </tbody>
    </table>
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 13

我使用一种可以说更简单的方法.在调用布局之前,只需在单个视图中的请求范围内定义变量.它将在请求中使用的所有模板中提供,包括布局和任何被调用的via<g:render>

<g:set var="SOMEVARIABLE" value="SOMEVALUE" scope="request"/>
<meta name="layout" content="yourlayout">
Run Code Online (Sandbox Code Playgroud)

然后就像引用布局中的任何其他变量或视图引入的其他模板一样引用变量

${SOMEVARIABLE}  or <g:if test="${SOMEVARIABLE}">, etc., etc
Run Code Online (Sandbox Code Playgroud)


lee*_*tts 2

您需要使用页面属性:http://grails.org/doc/1.1.1/ref/Tags/pageProperty.html

然后使用模型参数将其传递到渲染标记中。

干杯